0

engdemo.cppmatlab エンジンを使用する例をコンパイルして実行するように Eclipse を構成しようとしています。

ここに書かれている指示に従いましたが、まだエラーがあります:

make all 
Building target: matlabEngine
Invoking: GCC C++ Linker
g++ -L/usr/local/MATLAB/R2011a/bin/glnx86 -Xlinker -rpath-link -Xlinker /usr/local/MATLAB/R2011a/bin/glnx86 -o"matlabEngine"  ./engdemo.o   -leng -lm -lmat -lmex -lut
/usr/bin/ld: ./engdemo.o: undefined reference to symbol 'mxDestroyArray'
/usr/bin/ld: note: 'mxDestroyArray' is defined in DSO /usr/local/MATLAB/R2011a/bin/glnx86/libmx.so so try adding it to the linker command line
/usr/local/MATLAB/R2011a/bin/glnx86/libmx.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make: *** [matlabEngine] Errore 1

シェルからプログラムをコンパイルするとき、これらのコマンドを使用しますが、エラーがないので実行できます。

g++ -c  -I/usr/local/MATLAB/R2011a/extern/include -I/usr/local/MATLAB/R2011a/simulink/include -DMATLAB_MEX_FILE -ansi -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/local/MATLAB/R2011a/extern/include/cpp -I/usr/local/MATLAB/R2011a/extern/include -DGLNX86 -DGCC  -DMX_COMPAT_32 -O -DNDEBUG  "engdemo.cpp"
g++ -O  -o  "engdemo"  engdemo.o  -Wl,-rpath-link,/usr/local/MATLAB/R2011a/bin/glnx86 -L/usr/local/MATLAB/R2011a/bin/glnx86 -leng -lmx -lm

しかし、Eclipseでコンパイルする必要があります。何か助けはありますか?

4

1 に答える 1

0

通常、リンカエラーはデバッグが非常に厄介な場合があります。この場合、エラーは非常に有益です。

undefined reference to symbol 'mxDestroyArray'と呼ばれるシンボルを含むライブラリmxDestroyArrayがリンクされていないことを示します。ただし、ライブラリが呼び出されlibmx.so、で見つかった/usr/local/MATLAB/R2011a/bin/glnx86ため、どこを見ればよいかがわかります。

g++ -O ...コマンドには、このライブラリへのパス()を含めます。これにより、ライブラリ... -L/usr/local/MATLAB/R2011a/bin/glnx86 ...が機能する理由が説明されます。

また、コマンド-lので見られるフラグを使用して、リンカーコマンドでライブラリ自体を参照する必要があります。-lmxg++ -O ...

Eclipseでも同じことをする必要があります。

ProjectEclipseでは、メニューを選択してに移動すると、プロジェクトのパスとシンボルを見つけることができますProperties。展開C/C++ Generalして選択しますPaths and Symbols。このダイアログでは、g ++の-Lパラメーターと同様に、リンカーが必要とするライブラリーがどこにあるかをEclipseに通知できます。

これを行うには、ライブラリ名とパスを[Library PathsLibraries]タブの下のリストに追加します。

注:パスを追加するだけでは不十分です。ライブラリ名も指定する必要があります(g ++では、この場合は-lパラメーターです-lmx) 。

Librariesタブで、という名前の新しいライブラリを追加しますmx-lmxこれにより、Eclipseリンカーコマンドにが追加されます。

于 2012-07-19T12:39:08.563 に答える