我試圖編譯應用程序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)