Using mcc to compile code which calls mex files

I need to compile code which calls an outside function (GAMS) using mex files. I can compile the code with mcc and receive no errors. However, when I run the executable I get the following error,
sh: gams: command not found
Could not run (null): check gams.path
Error in ==> multistart_GAMS_initializer_v2_1>(parfor body) at 521
Error in ==> parallel_function at 477
Error in ==> multistart_GAMS_initializer_v2_1 at 501
Error in ==> restart at 7
MATGAMS:exec
where gams is the mex file calling the outside program.
gams is in the system folder containing the program, GAMS, to be called. The file pathdef.m is included in the folder from which matlab is being called so that the folder containing gams is on the matlabpath.
This code runs fine when it is not compiled.
My compile command is as follows:
/opt/MATLAB/R2011a/bin/mcc -m -a /opt/gams/23.5.1/gams.m -a /opt/gams/23.5.1/wgdx.m -a /opt/gams/23.5.1/writegdx.m -a /opt/gams/23.5.1/rgdx.m -a /opt/gams/23.5.1/readgdx.m -a /opt/gams/23.5.1/full2sp.m -a /opt/gams/23.5.1/sp2full.m -a /opt/gams/23.5.1/gams.mexa64 -a /opt/gams/23.5.1/gdxInfo.mexa64 -a /opt/gams/23.5.1/rgdx.mexa64 -a /opt/gams/23.5.1/wgdx.mexa64 -R -nodisplay -R -nodesktop

回答(2 个)

The error says "sh: gams: command not found" - so it seems like the "outside" program is not on the System path?

6 个评论

This may be the case, but why does the code run fine until it is compiled and then fail to run?
Try printing getenv('PATH') from the MATLAB version and the compiled version, and see if the path to gams is missing in the latter?
getenv returns the same path for both the compiled and uncompiled programs and neither explicitly includes the GAMS path.
As I continue to review the problem it is unclear whether it is the interface program (gams.mexa64) or whether the interface program cannot find the actual program file (also listed as gams).
Ah! I just realized that you seem to be running the MEX-file from a parfor body. If you are working in a distributed cluster configuration, could it be that some of your workers don't have gams installed, or are a different platform (32-bit, 64-bit difference or Linux/Windows difference)? What happens if you change it to a regular "for" loop?
I'm not 100% sure, but the way the error message is displayed "sh: gams: command not found" - with the "sh" in the beginning tells me that it's a system shell error.
No. I have the same problem with a test case without parallelization even when I run it in exactly the same place as the un-compiled code.
Tricia: Sorry, I've run out of ideas. Perhaps you should contact MathWorks Tech Support to see if they have any ideas?

请先登录,再进行评论。

Hi,
if you look into the file "multistart_GAMS_initializer_v2_1" that (from your error message) tries to start gams: does it do anything to the system path there? Or does it start some local shell script there (gams.sh or whatsoever) which is not there in the compiled application?
Titus

类别

帮助中心File Exchange 中查找有关 MATLAB Compiler 的更多信息

标签

提问:

2012-7-31

Community Treasure Hunt

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

Start Hunting!

Translated by