Calling matlab from C++

Calling matlab from C++

本文关键字:C++ from matlab Calling      更新时间:2023-10-16

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


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

按照@Kurt S所说的,您需要包含库。这些是你需要的常用工具:libeng。自由libmat。自由libmx。Lib,但您可能需要其他人。

所以你想添加链接选项-llibeng -llibmat -llibmx

但你可能也需要别人

下面是一个简单的makefile来帮助你开始:

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

问题是包含文件和文件夹(即库和链接文件)和一些额外依赖的规范不正确。

您可以使用一个简单的演示代码,用于C/c++与MATLAB的接口在这里给出,从而了解需要做什么。

您还需要使用CMAKELISTS.TXT文件,其中包含适合MATLAB的设置,这里有一个很好的教程。

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