将Matlab与C ++链接时出错

时间:2013-10-15 17:11:18

标签: c++ matlab g++ matlab-engine

我正在尝试在C ++程序中使用Matlab库:

#include <cstdlib>
#include <cstdio>
#include <string.h>
#include "engine.h"

using namespace std;


int main(int argc, char** argv) {
    Engine* mweng = engOpen("");
    engEvalString(mweng, "n = func(5)");
    printf ("%d",engGetVariable(mweng, "n"));

    engClose(mweng);
    return 0;
}

我使用包含MATLABROOT\extern\include目录的g ++编译我的项目,并出现以下错误:

build/Debug/Cygwin-Windows/main.o: In function `main':
/cygdrive/d/Projects/Task1/main.cpp:10: undefined reference to `_engOpen'
/cygdrive/d/Projects/Task1/main.cpp:11: undefined reference to `_engEvalString'
/cygdrive/d/Projects/Task1/main.cpp:12: undefined reference to `_engGetVariable'
/cygdrive/d/Projects/Task1/main.cpp:14: undefined reference to `_engClose'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin-Windows/task1.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

我想我在链接一些Matlab库时遇到了问题。

更新: 我和VS2012和Windows编译器有同样的问题。 目录extern\include包含在Additional include directories中,与添加到链接器extern\lib\win64\microsoft的{​​{1}}相同。 根据@jucestain注释,Additional library dependencies文件在链接器选项中添加到libeng.lib

更新2: 我们检测到兼容性问题:32位gcc不适用于64位Matlab引擎。因此,我将来自32位Matlab的Additional dependencies文件夹与我的/extern文件夹合并,将包含的链接库更改为/extern,并且我的代码已成功编译。感谢@aircooled!

1 个答案:

答案 0 :(得分:0)

这是我在cygwin提示符下用来获取main.exe的行:

$ g++ main.cpp -o main.exe -I/cygdrive/c/Program\ Files/MATLAB/R2009b/extern/include -L/cygdrive/c/Program\ Files/MATLAB/R2009b/extern/lib/win32/microsoft -llibeng

请注意,为gcc提供源和库的顺序非常重要 - 第一个来源,而不是库。