1

我正在尝试在 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相同。根据@jucestain 评论,该文件添加到链接器选项中。extern\lib\win64\microsoftAdditional library dependencieslibeng.libAdditional dependencies

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

4

1 回答 1

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很重要——首先是源,而不是库。

于 2013-10-18T13:03:03.113 回答