编译使用matlab引擎的c ++程序eclipse

时间:2012-07-19 11:26:14

标签: c++ eclipse matlab linker matlab-engine

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

我按照here编写的说明操作,但我仍然有错误:

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中编译。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

通常,链接器错误可能非常难以调试。在这种情况下,错误是非常有用的。

undefined reference to symbol 'mxDestroyArray'表示包含名为mxDestroyArray的符号的库未被链接。但是,它确实告诉您该库名为libmx.so,可在{{1}中找到所以你知道在哪里看。

/usr/local/MATLAB/R2011a/bin/glnx86命令中,您将包含此库的路径(g++ -O ...),这解释了它的工作原理。

您还需要使用... -L/usr/local/MATLAB/R2011a/bin/glnx86 ...标志中-l看到的-lmx标志在链接器命令中引用库本身。

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

在Eclipse中,您可以通过选择g++ -O ...菜单并转到Project来查找项目路径和符号。展开Properties并选择C/C++ General。此对话框允许您告知Eclipse链接器所需的库所在的位置,类似于g ++中的-L参数。

为此,请将库名称和路径添加到Paths and SymbolsLibrary Paths标签下的列表中。

注意:添加路径是不够的,您还需要指定库名称(以g ++为单位,它是-l参数,在本例中为Libraries

-lmx标签上,添加名为Libraries的新库。这应该在您的eclipse链接器命令中添加mx