我试图从.cpp文件中调用matlab。我使用以下命令进行编译
engdemo.cpp
,其中包含"engine.h"
g++ engdemo.cpp -I/usr/local/matlabR2010a/extern/include -L/usr/local/matlabR2010a/extern/lib -o engdemo
我得到的是以下内容:
engdemo.cpp:(.text+0xdb): undefined reference to `engOpen'
engdemo.cpp:(.text+0x12d): undefined reference to `mxCreateDoubleMatrix'
engdemo.cpp:(.text+0x143): undefined reference to `mxGetPr'
engdemo.cpp:(.text+0x175): undefined reference to `engPutVariable'
engdemo.cpp:(.text+0x189): undefined reference to `engEvalString'
...
collect2:ld返回1退出状态
我想这可能是一些链接问题,但我不确定。请帮帮我。非常感谢提前!
答案 0 :(得分:2)
跟进what @Kurt S said,您需要包含库。这些是您需要的常用文件:libeng.lib libmat.lib libmx.lib,但您可能需要其他文件。
因此,您要添加链接选项-llibeng -llibmat -llibmx
但你也可能需要其他人。
答案 1 :(得分:2)
这是一个简单的makefile,可以帮助您入门:
# root directory of MATLAB installation
MATLABROOT="/usr/local/matlabR2010a"
all: engdemo
engdemo:
g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
-I${MATLABROOT}/extern/include \
-L${MATLABROOT}/extern/lib -llibeng -llibmx
clean:
rm -f engdemo *.o
只需拨打make
,然后将程序作为./engdemo
您也可以直接从MATLAB内部编译。首先确保至少运行一次mbuild -setup
命令:
>> srcFile = fullfile(matlabroot,'extern','examples','eng_mat','engdemo.cpp');
>> mbuild(srcFile, '-llibeng','-llibmx')
>> !engdemo
答案 2 :(得分:1)
问题是包含文件和文件夹(即库和链接文件)的规范不正确以及一些其他依赖项。
您可以使用简单的演示代码来连接C / C ++,并给出MATLAB here,以便了解需要做什么。
此外,您还需要使用具有适当MATLAB设置的CMAKELISTS.TXT文件,为此提供了一个很好的教程here。
答案 3 :(得分:0)
您需要告诉它要链接哪些库与g ++的 -l </ strong>选项。根据您的链接线,库应位于 / usr / local / matlabR2010a / extern / lib 中。例如,如果您需要的库名为 libmatlab.a ,则需要在命令行中添加-lmatlab
选项。