簡體   English   中英

將Matlab與C ++鏈接時出錯

[英]Error linking Matlab with C++

我正在嘗試在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相同Additional library dependencies 根據@jucestain注釋, libeng.lib文件已添加到鏈接器選項中的“ Additional dependencies

更新2:我們檢測到一個兼容性問題:32位gcc不適用於64位Matlab引擎。 所以,我合並/extern從32位Matlab的文件夾我的/extern文件夾,改變附帶的鏈接庫/extern/lib/win32/lcc ,我的代碼編譯成功。 感謝@aircooled!

這是我在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分配源和庫的順序很重要-首先提供源,而不是庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM