我编译好的opencv库与ros2 humble库里面的opencv库的解决方案
首先明确
我们从源码编译的opencv库在/usr/local/中
ros2 humble的opencv库在/opt/ros/humble/中
一般我们默认选取这个/usr/local/的opencv库
一·发现问题
这里是我清除之前构建好的包的一个
原错误是
--- stderr: grab_demo gmake[2]: *** 没有规则可制作目标“/opt/opencv_410/lib/libopencv_aruco.so”,由“charuco_dectet_node” 需求。 停止。 gmake[2]: *** 正在等待未完成的任务.... In file included from /home/dxf/WHEELTEC_S300Pro_mini_ros2_arm_src_2025_9_15/src/grab_demo/src/charuco_dectet_node.cpp:1: /home/dxf/WHEELTEC_S300Pro_mini_ros2_arm_src_2025_9_15/src/grab_demo/include/grab_demo/charuco_dectet_node.hpp:7:10: fatal error: opencv2/aruco/charuco.hpp: 没有那个文件或目录 7 | #include <opencv2/aruco/charuco.hpp> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. gmake[2]: *** [CMakeFiles/charuco_dectet_node.dir/build.make:76:CMakeFiles/charuco_dectet_node.dir/src/charuco_dectet_node.cpp.o] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:665:CMakeFiles/charuco_dectet_node.dir/all] 错误 2 gmake[1]: *** 正在等待未完成的任务.... /home/dxf/WHEELTEC_S300Pro_mini_ros2_arm_src_2025_9_15/src/grab_demo/src/hand_eye.cpp:7:10: fatal error: opencv2/aruco/charuco.hpp: 没有那个文件或目录 7 | #include <opencv2/aruco/charuco.hpp> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. gmake[2]: *** [CMakeFiles/hand_eye.dir/build.make:76:CMakeFiles/hand_eye.dir/src/hand_eye.cpp.o] 错误 1 gmake[1]: *** [CMakeFiles/Makefile2:691:CMakeFiles/hand_eye.dir/all] 错误 2 gmake: *** [Makefile:146:all] 错误 2 --- Failed <<< grab_demo [49.6s, exited with code 2] Summary: 3 packages finished [1min 17s] 1 package failed: grab_demo 1 package had stderr output: grab_demo
就是在构建这个包的时候没有找到头文件<opencv2/aruco/charuco.hpp>
这里可能是我们的opencv构建出了一些问题
二·解决问题
1.现将原来构建的opencv库卸载
(1)查找原来安装的opencv库
sudo find /usr/local -name "*opencv*"
(2)删除原来的构建
sudo rm -rf /usr/local/include/opencv4
sudo rm -rf /usr/local/lib/libopencv*
sudo rm -rf /usr/local/lib/cmake/opencv4
sudo rm -rf /usr/local/lib/pkgconfig/opencv4.pc
sudo rm -rf /usr/local/share/opencv4
sudo rm -rf /usr/local/share/java/opencv4
sudo rm -f /usr/local/bin/setup_vars_opencv4.sh
(3)更新动态库文件
sudo ldconfig
2.扩展虚拟内存
(1)扩展虚拟内存
sudo fallocate -l 10G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
(2)检测是否扩展成功
free -h
3.从git仓库克隆源码
(1)新建文件夹并且克隆opencv和opencv_contrib
mkdir -p ~/opencv410 && cd ~/opencv410
git clone -b 4.10.0 https://github.com/opencv/opencv.git
git clone -b 4.10.0 https://github.com/opencv/opencv_contrib.git
(2)编译依赖准备
sudo apt update
sudo apt install -y build-essential cmake git pkg-config \libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev \libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev \libdc1394-22-dev libv4l-dev libopenexr-dev libxvidcore-dev \libx264-dev python3-dev python3-numpy
(3)进入opencv库并且新建build
cd ~/opencv410/opencv
mkdir build && cd build
(4)执行cmake命令
cmake -D CMAKE_BUILD_TYPE=Release \-D CMAKE_INSTALL_PREFIX=/usr/local/opencv410 \-D OPENCV_EXTRA_MODULES_PATH=~/opencv410/opencv_contrib/modules \-D BUILD_EXAMPLES=OFF \-D WITH_QT=OFF \-D WITH_OPENGL=ON \-D WITH_TBB=ON \-D WITH_V4L=ON \-D WITH_FFMPEG=ON \-D WITH_GSTREAMER=ON \-D BUILD_opencv_python3=ON \..
(5)编译
make -j$(nproc)
(6)安装
sudo make install
(7)设置环境
echo "" >> ~/.bashrc
echo "# >>> OpenCV 4.10 custom install >>>" >> ~/.bashrc
echo "export PKG_CONFIG_PATH=/usr/local/opencv410/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=/usr/local/opencv410/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
echo "export OpenCV_DIR=/usr/local/opencv410/lib/cmake/opencv4" >> ~/.bashrc
echo "# <<< OpenCV 4.10 custom install <<<" >> ~/.bashrc
source ~/.bashrc
(8)检查是否安装opencv
pkg-config --modversion opencv4