2014-02-14 58 views
0

我试图编译应用程序pipeline并链接它与我的库matlabengine,它充当包装到Matlab调用。 Matlab的使用它自己这是在Matlab的lib文件夹混合libstc++旧版本.../bin/glnxa64cmake添加标志,从子目录库,破坏链接/库链接优先

matlabengine编译好的,但pipeline失败未解决的符号(由于管道使用Matlab的libstdc++版)

基本上我有两个问题,解决或者一个应该解决这个问题:

  1. 删除参数-leng -lmx -L/usr/local/MATLAB/R2013a/bin/glnxa64pipeline连接,从子目录mex其起源。当我手工编译matlabengine并让cmake链接到管道时,这些标志不会出现,并且一切正常。为什么这些添加到管道的链接时,如果没有它们完美的工作?

  2. 由于Matlab的旧libstC++在系统范围的libstdC++之前使用,我得到了未解析的符号。修复命令C++搜索这些库也应该解决这个问题。

任何帮助深表感谢......

CMakeList.txt

link_directories("/usr/local/MATLAB/R2013a}/bin/glnxa64") 
include_directories(mex) 
add_subdirectory(mex) 
ADD_EXECUTABLE(pipeline pipeline.cpp) 
TARGET_LINK_LIBRARIES(pipeline matlabengine ${OpenCV_LIBS}) 

MEX/CMakeList.txt(这应该效仿MATLAB的MEX编译器封装器)

# mex specific c++ flags 
set(MATLAB_PATH "/usr/local/MATLAB/R2013a") 
set(CMAKE_CXX_COMPILER "gcc-4.4") 
set(CMAKE_CXX_FLAGS "-D_GNU_SOURCE -fexceptions -DMX_COMPAT_32 -O -DNDEBUG -fPIC -DMATLAB_MEX_FILE") 

include_directories("${MATLAB_PATH}/extern/include") 
link_directories("${MATLAB_PATH}/bin/glnxa64") 
add_library(matlabengine SHARED matlabengine.cpp) 
target_link_libraries(matlabengine eng mx m) 

回答

0

问题1可以通过告诉cmake关闭传递链接来解决

MEX/CMakeList.txt

set_target_properties(matlabengine PROPERTIES LINK_INTERFACE_LIBRARIES "") 

然后,链接编译器将搜索在library path环境变量的库时。由于问题2,系统标准库文件夹应该像linux一样位于matlab库文件夹之前:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/MATLAB/R2013a/bin/glnxa64/