问题分析
自己写的系统必须基于opencv 2.x,而ros kinetic自带了opencv3的版本。于是在编译时报错:
/usr/bin/ld: CMakeFiles/xxxx.cpp.o: undefined reference to symbol '_ZN2cv6String10deallocateEv'
/opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so.3.3.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/xxxx/build.make:192: recipe for target '../xxxx' failed
而自己的系统里 Pangolin 等一堆库都基于2.x版本opencv了,不好再做调整,于是只好强行调整ros的opencv依赖来使其适应我的系统了。
ros中用到opencv的地方是从话题中读取图像,如 /camera/image_raw话题中抓取 rgb或depth图像保存为cv::Mat,所需用到的ros包是cv_bridge。
因此核心问题是: ros的包cv_bridge使用默认opencv3编译,而自身系统使用opencv 2.x编译,opencv的混合编译带来了错误。
问题解决方法
方法一共有两种:
1) 浅依赖可以直接调整cv_bridge的cmake文件,详细可参考:https://www.mobibrw.com/2017/8718
这个方法可以帮助我通过编译,然而实际