Building portable MEX files

3 次查看(过去 30 天)
Hi. My question is how to build MEX files that are portable using the Matlab Coder?
The problem: I can build a MEX file, using Visual Studio C++ Express from auto generated (by Matlab Coder) C code that can run on my system with no problems, but when I try to run it on a different system, without Matlab Coder, I cannot run it even after installing the Visual Studio redistributeable files. The error code I get is: "Invalid MEX file: specific module cannot be found".
The by far optimal solution: I have actually looked deeper into this and found, using DependencyWalker, that a number of DLL files are required in order for the MEX file to run. If they are not present in the system path, or working directory, the MEX file cannot run and gives the above error code.
Can anyone comment/aide on this?
Sincerely, Tobias Elmøe

采纳的回答

Friedrich
Friedrich 2011-7-12
Hi,
you are getting this error because you compiled with a Visual Studio compiler and during compiling you will link against certain libraries from that Visual Studio. In order to be able to run that mex file on a different machine you have to install the matching redistributable version on the target machine. Matlab is shipped with the 2005 redistributable package. So please install the 2008 or 2010 redist. package on the target machine.
I think the only way to make a mex file portable is to use a 32bit ML and use the LCC for compiling. But this will limit you to use 32bit ML only.
  2 个评论
Tobias Elmøe
Tobias Elmøe 2011-7-12
Hi - Thanks for the answer, but as I said in my question above, I have already installed the redistributable files on the target machine. Without any effect, sadly.
Tobias Elmøe
Tobias Elmøe 2011-7-12
I seem to have pressed accept on the answer, that was an error, sorry!

请先登录,再进行评论。

更多回答(3 个)

Tobias Elmøe
Tobias Elmøe 2011-7-12
Hello again. I contacted Mathworks Technical Support, who promised to get back to me on email later today or tomorrow. What I don't understand is that there is a MEX library with Matlab as standard. Why does code built to MEX with the Matlab Coder require a special set of DLL files?
Sincerely,
  4 个评论
Tobias Elmøe
Tobias Elmøe 2011-7-29
Hello again, the following answer was provided to me from the Mathworks tech support:
"I further discussed this issue with our developers and they told me they are currently investigating this issue in further detail. The deployment of MATLAB Coder generated MEX-files is not a documented process and the licensing for this is currently under discussion.
[...]
As this topic is under further discussion I cannot provide any further details at this point in time, however there will be changes to this process in the future. Our developers have your contact details and will be in touch with you as soon as more details are available on this.
From a technical support perspective there is not much else I can do at the moment, other than suggest to try the work around above. If you do experience any further issues, please do not hesitate to let me know, otherwise I will consider this request resolved."
There was a suggested workaround, but it is subject to licensing that may change, so it is not really a valid workaround. Fact is the Mathworks calls their product standalone, while that is not the full truth.
Sincerely,
Tobias Elmøe

请先登录,再进行评论。


Alexander Bottema
Alexander Bottema 2011-7-12
Hi Tobias, Do you know what DLLs are missing? When you say that you try to run it on a different system, does this mean that MATLAB is installed (but not MATLAB Coder)? Or do you mean that MATLAB itself is not installed? Thanks, Alexander
  1 个评论
Tobias Elmøe
Tobias Elmøe 2011-7-12
Hi Alexander. The DLL files include, but not limited to, FITOOLS.DLL, LIBEMLRT.DLL, LIBMWEMLRT_RES.DLL, LIBMWFIXEDPOINTCORE.DLL, LIBMWFIXEDPOINTCORE_RES.DLL, and 5 others.
And yes, what I ment was that Matlab Coder was not installed on the different system, but Matlab itself was (v. 2011a on both build and target machine).
Sincerely,

请先登录,再进行评论。


Friedrich
Friedrich 2011-7-12
Hi,
please contact MW Technical Support for this. It seems that ML Coder is not made for deplyoing your mex functions to other ML users.
I think the Technical Support can tell you more about this.
(Simply copying the missing DLLs will violate the license agreement)
  3 个评论
Friedrich
Friedrich 2011-7-12
It really looks like that it is not made for deploying. The MCR provides these DLLs which your mex file is missing. So writing a wrapper function and compiling it into an exe should work fine. But I think there is no easy way to deploy the mex file only.
Contact the Support and mention these two internal numbers: g730952 and g613886 (this should speed things up)
Tobias Elmøe
Tobias Elmøe 2011-7-12
Hi Friedrich, thanks again for your answer. I was thinking of compiling a static c-library with the Coder and then use the MEX wrapper c-code function that is autogenerated when selecting MEX as an output, and then compile these together. It should be possible to modify the makefile to include the static library, but I don't know how unfortunately, I am not the c-code expert...

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 MATLAB Coder 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by