I followed the MATLAB instructions on compiling a C program that uses the matlab engine to call matlab functions. The works find when I run the commands from MATLAB (with the exception that I must use !./engdemo with the
./ to make the thing run). But if I try to compile the program on the command line using gcc, I get this error:
"_mxCreateDoubleMatrix_730", referenced from:
_main in ccpVU28R.o
"_engOutputBuffer", referenced from:
ld: symbol(s) not found
collect2: ld returned 1 exit status
After much searching around I have found a solution to this problem. Not sure how good it is since it involves messing with
DYLD_LIBRARY_PATH and I’ve been warned never to mess with that. None the less here’s what I did:
First in your ~/.profile add (or just type into the shell):
You may have to change MATLAB_R2009aSV.app to the name of the MATLAB program folder on your computer.
Then in the shell (you will have to do this everytime you compile or add this to your ~/.profile):
64-bitters may need to change the
maci-64 or something.
Finally compile using all these flags and parameters:
g++ -o engdemo engdemo.cpp -I$MATLAB/extern/include/ -L$MATLAB/bin/maci/ -leng -lm -lmat -lmx -lut
gcc -o engdemo engdemo.c -I$MATLAB/extern/include/ -L$MATLAB/bin/maci/ -leng -lm -lmat -lmx -lut
A similar solution for linux
Update: If you run into an error that goes something like this:
ImportError: dlopen([your library], 2): Library not loaded: @loader_path/libeng.dylib
Then you need to change your
DYLD_LIBRARY_PATH as mentioned above.
Although then in a different library I get a new error:
ImportError: dlopen(lib/_Drawers.so, 2): Library not loaded: /opt/local/lib/libmpfr.1.dylib
Referenced from: [your other library]
Reason: Incompatible library version: [your other library] requires version 4.0.0 or later, but libmpfr.1.dylib provides version 3.0.0
Which seems to be because MATLAB has its own out of date libmpfr.1.dylib which causes CGAL to belch. Haven’t come upon a solution for this yet but will post if I do.