opencv庫作為第三方庫
在編譯一個依賴opencv庫的庫時,報出以下錯誤:
undefined reference to symbol ‘_ZN2cv6imreadERKNS_6StringEi’
libopencv_core.so.2.4: error adding symbols: DSO missing from command line
error: collect2: error: ld returned 1 exit status
分析:
該平臺裝有兩個opencv庫,一個2.4.8版本,一個3.3.1版本,其中2.4.8的.so檔案在/usr/lib/x86_64-linux-gnu目錄下,在CMakeLists.txt檔案裡面語句FIND_PACKAGE(OpenCV REQUIRED),找到以下兩個變數的路徑均是預設的2.4.8的版本目錄。
${OpenCV_INCLUDE_DIRS}
${OpenCV_LIBS}
如果需要依賴3.3.1的版本,則需註釋掉語句FIND_PACKAGE(OpenCV REQUIRED),並新增:
SET(OpenCV_INCLUDE_DIRS /usr/local/opencv321/include)
SET(OpenCV_LIBS /usr/local/opencv321/lib)
設定依賴的opencv庫的路徑。
但是這種操作經常會引發上述錯誤。
解決:
在需要opencv庫的地方,直接新增完整路徑下的.so檔案即可。
ADD_EXECUTABLE(main_pipeline src/main_pipeline.cpp) TARGET_LINK_LIBRARIES(main_pipeline vio /usr/local/lib/libgtsam.so ${DLib_LIBS} ${DBoW2_LIBS} /usr/local/opencv321/lib/libopencv_core.so /usr/local/opencv321/lib/libopencv_highgui.so /usr/local/opencv321/lib/libopencv_imgcodecs.so /usr/local/opencv321/lib/libopencv_video.so /usr/local/opencv321/lib/libopencv_calib3d.so /usr/local/opencv321/lib/libopencv_features2d.so /usr/local/opencv321/lib/libopencv_flann.so)