我试图编译应用程序pipeline
并链接它与我的库matlabengine
,它充当包装到Matlab调用。 Matlab的使用它自己这是在Matlab的lib文件夹混合libstc++
旧版本.../bin/glnxa64
cmake添加标志,从子目录库,破坏链接/库链接优先
matlabengine
编译好的,但pipeline
失败未解决的符号(由于管道使用Matlab的libstdc++
版)
基本上我有两个问题,解决或者一个应该解决这个问题:
删除参数
-leng -lmx -L/usr/local/MATLAB/R2013a/bin/glnxa64
从pipeline
连接,从子目录mex
其起源。当我手工编译matlabengine
并让cmake链接到管道时,这些标志不会出现,并且一切正常。为什么这些添加到管道的链接时,如果没有它们完美的工作?由于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)