红联Linux门户
Linux帮助

Ubuntu下编译matlab eigen时:undefined reference to `engOpen'

发布时间:2016-11-27 10:34:30来源:linux网站作者:arackethis
在Ubuntu中,c++调用matlab引擎(入门实例:http://www.linuxdiyf.com/linux/26372.html),已经设置好了库文件的查找路径,但是编译时还是报错:
$ g++ matlab_eigen.cpp -o matlab_eigen -I/opt/MATLAB/R2012a/extern/include -L/opt/MATLAB/R2012a/bin/glnxa64
/tmp/cccXS6eb.o: In function `main':
matlab_eigen.cpp:(.text+0xe): undefined reference to `engOpen'
matlab_eigen.cpp:(.text+0x52): undefined reference to `engEvalString'
matlab_eigen.cpp:(.text+0x63): undefined reference to `engEvalString'
matlab_eigen.cpp:(.text+0x74): undefined reference to `engEvalString'
matlab_eigen.cpp:(.text+0x85): undefined reference to `engEvalString'
collect2: ld returned 1 exit status
 
原因:缺少需要的链接库:
在windows下:libeng.lib libmx.lib libmex.lib libmat.lib (依次对应-llibeng -llibmx -llibmex -llibmat)
在Linux下:libeng.so,libmx.so libmex.so libmat.so (依次对应的库名是:eng, mx, mex, mat),Linux库命名规则详情见附[1]。
 
解决方法:
用-l链接到这些动态库就行。即:
$ g++ matlab_eigen.cpp -o matlab_eigen -I/opt/MATLAB/R2012a/extern/include -L/opt/MATLAB/R2012a/bin/glnxa64 -leng -lmx
比如,“-leng”就告诉gcc在链接阶段引用共享函数库libeng.so。对此更详细的描述可以点这里。
注意:windows和Linux库是不兼容的,命名规则也不一样,不要弄混了把windows的库名用在了linux上,linux系统是无法找到库的,比如上面的编译语句如果这样写:
$ g++ matlab_eigen.cpp -o matlab_eigen -I/opt/MATLAB/R2012a/extern/include -L/opt/MATLAB/R2012a/bin/glnxa64 -llibeng -llibmx
g++编译器就会报这个错误:
/usr/bin/ld: cannot find -llibeng
/usr/bin/ld: cannot find -llibmx
collect2: ld returned 1 exit status
关于库的命名,附[1]有更详细的说明。
 
附[1]:
Ubuntu下编译matlab eigen时:undefined reference to `engOpen'
 
本文永久更新地址:http://www.linuxdiyf.com/linux/26371.html