1. 程式人生 > >opencv庫作為第三方庫

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)