解决ROS编译安装Opencv项目出现undefined Reference to....问题
程序员文章站
2022-06-22 19:55:04
...
一,问题描述
已经编译安装了Opencv,但是编译Opencv功能包时出现undefined Reference to…的错误
二,解决方法
这一般是由于多个Opencv环境冲突的问题,比如我这里编译安装Opencv3.3.1版本
则需要通过以下命令安装:
unzip opencv-3.3.1.zip
cd opencv-3.3.1
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.3.1 ..
make
sudo make install
网上大多数安装教程指定的CMAKE_INSTALL_PREFIX
目录都是/usr/local
这就造成了一个问题,因为系统自带的opencv库也是安装在这个目录,自己编译的也安装在这个目录,就会造成库冲突,所以我们这里指定的是:
CMAKE_INSTALL_PREFIX=/usr/local/opencv3.3.1
避免冲突
接下来在功能包的CmakeList需要指定:
find_package(OpenCV 3.3.1 REQUIRED)
include_directories(
include
${catkin_INCLUDE_DIRS}
${Boost_INUCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
target_link_libraries(功能包名 ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${OpenCV_LIBS})
我在网上找错误的解决方案,大多数都是说设置cmakeList以上即可解决问题,但是我设置后还是出现这个问题:
libopencv_core.so.3.3, needed by /usr/local/opencv3.3.1/lib/libopencv_highgui.so.3.3.1, may conflict
我这里通过设置Cv_Bridge的opencv包含目录解决:
sudo nano /opt/ros/kinetic/share/cv_bridge/cmake/cv_bridgeConfig.cmake
更改为自己opncv的安装目录
即可编译成功:
参考:
OpenCV 3与ROS兼容、OpenCV多版本共存
解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记
ROS opencv 版本冲突
下一篇: 如何在海边拍出漂亮的照片?