欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决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的安装目录
解决ROS编译安装Opencv项目出现undefined Reference to....问题
即可编译成功:
解决ROS编译安装Opencv项目出现undefined Reference to....问题

参考:
OpenCV 3与ROS兼容、OpenCV多版本共存
解决Ubuntu环境下ROS Kinetic中的cv_bridge和自己安装OpenCV 2.4.xx兼容性笔记
ROS opencv 版本冲突