0

我正在尝试配置 eclipse 来编译和运行engdemo.cpp使用 matlab 引擎的示例。

我按照这里写的说明进行操作,但仍然有错误:

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

当我从 shell 编译程序时,我使用这些命令,并且没有错误,所以我可以运行它。

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标志-lmx在链接器命令中引用库本身g++ -O ...

您需要在 Eclipse 中做同样的事情。

在 Eclipse 中,您可以通过选择Project菜单并转到Properties. 展开C/C++ General并选择Paths and Symbols。此对话框允许您告诉 Eclipse 链接器所需的库位于何处,类似于 g++ 中的 -L 参数。

为此,请将库名称和路径添加到Library PathsLibraries选项卡下的列表中。

注意:添加路径是不够的,您还需要指定库名称(在 g++ 中它是 -l 参数,在这种情况下,-lmx

Libraries选项卡上,添加一个名为mx. 这应该在-lmx您的 eclipse 链接器命令中添加一个。

于 2012-07-19T12:39:08.563 回答