我正在尝试在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!
答案 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
提供源和库的顺序非常重要 - 第一个来源,而不是库。