6

.cpp ファイルから matlab を呼び出そうとしました。次のコマンドを使用してコンパイル しましengdemo.cpp"engine.h"

g++ engdemo.cpp -I/usr/local/matlabR2010a/extern/include -L/usr/local/matlabR2010a/extern/lib -o engdemo

私が得たものは次のとおりです。

engdemo.cpp:(.text+0xdb): undefined reference to `engOpen'
engdemo.cpp:(.text+0x12d): undefined reference to `mxCreateDoubleMatrix'
engdemo.cpp:(.text+0x143): undefined reference to `mxGetPr'
engdemo.cpp:(.text+0x175): undefined reference to `engPutVariable'
engdemo.cpp:(.text+0x189): undefined reference to `engEvalString'

...

collect2: ld が 1 つの終了ステータスを返しました


リンクの問題かもしれませんが、よくわかりません。私を助けてください。よろしくお願いします!

4

4 に答える 4

2

@Kurt S の発言をフォローアップするには、ライブラリを含める必要があります。libeng.lib libmat.lib libmx.lib が必要になる一般的なものですが、他にも必要になる場合があります。

したがって、リンクオプションを追加したい-llibeng -llibmat -llibmx

しかし、他の人も必要かもしれません。

于 2011-10-13T17:42:03.143 に答える
2

開始するのに役立つ簡単なメイクファイルを次に示します。

メイクファイル

# root directory of MATLAB installation
MATLABROOT="/usr/local/matlabR2010a"

all: engdemo

engdemo:
    g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
        -I${MATLABROOT}/extern/include \
        -L${MATLABROOT}/extern/lib -llibeng -llibmx

clean:
    rm -f engdemo *.o

を呼び出しmakeてから、プログラムを次のように実行するだけで使用できます。./engdemo


これを MATLAB 内から直接コンパイルすることもできます。mbuild -setupまず、コマンドを少なくとも 1 回実行したことを確認します。

>> srcFile = fullfile(matlabroot,'extern','examples','eng_mat','engdemo.cpp');
>> mbuild(srcFile, '-llibeng','-llibmx')
>> !engdemo
于 2011-10-14T03:46:06.503 に答える
1

問題は、インクルード ファイルとフォルダー (つまり、ライブラリとリンク ファイル) の不適切な指定と、いくつかの追加の依存関係にあります。

C/C++ と MATLAB をインターフェースするための簡単なデモ コードを利用できますこれにより、何を行う必要があるかを理解できます。

また、MATLAB に適した設定の CMAKELISTS.TXT ファイルを使用する必要があります。このための優れたチュートリアルがここで利用できます。

于 2013-01-19T09:56:23.310 に答える
0

g++ の-lオプションを使用して、リンクするライブラリを指定する必要があります。リンク行に基づいて、ライブラリは/usr/local/matlabR2010a/extern/libにあるはずです。たとえば、必要なライブラリがlibmatlab.a-lmatlabという名前の場合、コマンド ラインにオプションを追加する必要があります。

于 2011-10-13T16:59:34.560 に答える