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;
}
インクルード ディレクトリを使用して g++ でプロジェクトをコンパイルするMATLABROOT\extern\include
と、次のエラーが発生します。
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
に、 に含まれるディレクトリ。@jucestain のコメントによると、ファイルはリンカー オプションに追加されました。Additional include directories
extern\lib\win64\microsoft
Additional library dependencies
libeng.lib
Additional dependencies
更新 2: 互換性の問題が検出されました: 32 ビット gcc は 64 ビット Matlab エンジンでは動作しません。/extern
そのため、 32 ビット Matlab のフォルダーを自分のフォルダーとマージし/extern
、含まれているリンカー ライブラリを に変更する/extern/lib/win32/lcc
と、コードが正常にコンパイルされました。@aircooled に感謝!