登录论坛

查看完整版本 : 如何从C ++代码调用Matlab?


poster
2019-12-10, 20:41
我正在尝试从C ++代码调用Matlab函数。

通过Matlab,它在/extern/examples/eng_mat/engdemo.cpp中提供了此类代码的示例,但是我找不到构建该源代码的方法。

这是我使用的makefile:

CFLAGS = -Wall -O3 INCLUDES = -I/opt/Matlab-2009a/extern/include LIBRARIES = -Wl,-R/opt/Matlab-2009a/bin/glnx86 -L/opt/Matlab-2009a/bin/glnx86 -lmx -lmat -leng out : engdemo.cpp g++ $(CFLAGS) $(INCLUDES) -static $^ $(LIBRARIES) -o out clean : rm -f out (这里/ opt / Matlab-2009a是我的Matlab根目录。)我收到这样的链接器错误:

/usr/bin/ld: cannot find -lmx collect2: ld returned 1 exit status make: *** [out] Error 1 问题是:如何使g ++编译engdemo.cpp?

请注意,共享库存在:

$ locate libmx.so /opt/Matlab-2009a/bin/glnx86/libmx.so /opt/Matlab-2009a/bin/glnx86/libmx.so.csf 和

$ ldd /opt/Matlab-2009a/bin/glnx86/libmx.so linux-gate.so.1 => (0x004b4000) libut.so => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/libut.so (0x0078f000) libmwfl.so => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/libmwfl.so (0x00110000) libicudata.so.38 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/libicudata.so.38 (0xb7f82000) libicuuc.so.38 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/libicuuc.so.38 (0x00bee000) libicui18n.so.38 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/libicui18n.so.38 (0x001f7000) libicuio.so.38 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/libicuio.so.38 (0x00e1c000) libz.so.1 => /usr/lib/libz.so.1 (0x0098e000) libstdc++.so.6 => /opt/Matlab-2009a/bin/glnx86/../../sys/os/glnx86/libstdc++.so.6 (0x00531000) libm.so.6 => /lib/libm.so.6 (0x00194000) libgcc_s.so.1 => /opt/Matlab-2009a/bin/glnx86/../../sys/os/glnx86/libgcc_s.so.1 (0x00eaa000) libpthread.so.0 => /lib/libpthread.so.0 (0x00900000) libc.so.6 => /lib/libc.so.6 (0x00345000) librt.so.1 => /lib/librt.so.1 (0x00964000) libdl.so.2 => /lib/libdl.so.2 (0x0014e000) libexpat.so.1 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/../../bin/glnx86/libexpat.so.1 (0x00152000) libboost_thread-gcc42-mt-1_36.so.1.36.0 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/../../bin/glnx86/libboost_thread-gcc42-mt-1_36.so.1.36.0 (0x00fc2000) libboost_signals-gcc42-mt-1_36.so.1.36.0 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/../../bin/glnx86/libboost_signals-gcc42-mt-1_36.so.1.36.0 (0x0017d000) libboost_system-gcc42-mt-1_36.so.1.36.0 => /opt/Matlab-2009a/bin/glnx86/../../bin/glnx86/../../bin/glnx86/libboost_system-gcc42-mt-1_36.so.1.36.0 (0x00a06000) /lib/ld-linux.so.2 (0x001db000) 那么,如何使g ++编译engdemo.cpp呢?



回答:

假设$ MATLABROOT是MATLAB的路径:

$MATLABROOT/bin/mex -f $MATLABROOT/bin/engopts.sh engdemo.cpp 如果添加-v开关,详细输出将显示正在使用哪些命令来编译引擎应用程序。



更多&回答... (https://stackoverflow.com/questions/3165080)