6

我试图从 .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 个退出状态


我想这可能是一些链接问题,但我不确定。请帮帮我。提前谢谢了!

4

4 回答 4

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
于 2011-10-14T03:46:06.503 回答
2

跟进@Kurt S 所说的内容,您需要包含库。这些是您需要的常见的:libeng.lib libmat.lib libmx.lib,但您可能需要其他的。

因此,您要添加链接选项-llibeng -llibmat -llibmx

但你可能还需要其他人。

于 2011-10-13T17:42:03.143 回答
1

问题是包含文件和文件夹(即库和链接文件)以及一些其他依赖项的规范不正确。

您可以使用一个简单的演示代码来连接 C/C++ 和 MATLAB这里给出,以便了解需要做什么。

您还需要使用具有适合 MATLAB 设置的 CMAKELISTS.TXT 文件,此处提供了一个很好的教程。

于 2013-01-19T09:56:23.310 回答
0

您需要使用g++的-l选项告诉它要链接哪些库。根据您的链接行,该库应位于/usr/local/matlabR2010a/extern/lib中。例如,如果您需要的库名为libmatlab.a,您需要将-lmatlab选项添加到命令行。

于 2011-10-13T16:59:34.560 回答