在编译一个依赖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)