我正在尝试配置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中编译。 有什么帮助吗?
答案 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 Symbols
和Library Paths
标签下的列表中。
注意:添加路径是不够的,您还需要指定库名称(以g ++为单位,它是-l参数,在本例中为Libraries
)
在-lmx
标签上,添加名为Libraries
的新库。这应该在您的eclipse链接器命令中添加mx
。