1.开始是opencv4.6.0 orb_slam3 的普通包和其ros包可以正常编译,但是 nx 运行orb_slam3 报错
modules/core/src/matrix.cpp:246: error: (-215:Assertion failed) s >= 0 in function 'setSize'
opencv 4.6.0
nx 运行orb_slam3 报错,NUC13上的opencv4.2.0能够正常运行
相关资料:
后面换成opencv3.4.8 orb_slam3的正常包可以编译成功,但是ros包编译出错。
2.编译pointcloud_mapping包时,遇到的这个问题,同时在/usr/local又安装了opencv4.2.0(原来的opencv4.6.0依然存在)出现的这个问题。
/usr/bin/ld: CMakeFiles/pointcloud_mapping.dir/src/PointCloudMapper.cc.o: in function `Mapping::PointCloudMapper::callback(boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const>, boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const>, boost::shared_ptr<geometry_msgs::PoseStamped_<std::allocator<void> > const>, boost::shared_ptr<nav_msgs::Path_<std::allocator<void> > const>)':
PointCloudMapper.cc:(.text+0x1b34): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: PointCloudMapper.cc:(.text+0x1b48): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: PointCloudMapper.cc:(.text+0x1b50): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: PointCloudMapper.cc:(.text+0x2248): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/pointcloud_mapping.dir/src/PointCloudMapper.cc.o: in function `Mapping::PointCloudMapper::PointCloudMapper()':
PointCloudMapper.cc:(.text+0x2b7c): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/pointcloud_mapping.dir/src/PointCloudMapper.cc.o:PointCloudMapper.cc:(.text+0x2b98): more undefined references to `cv::Mat::Mat()' follow
collect2: error: ld returned 1 exit status
make[2]: *** [orb_slam3_pcl_mapping/CMakeFiles/pointcloud_mapping.dir/build.make:288: /home/nvidia/catkin_pkg/devel/lib/pointcloud_mapping_orb3/pointcloud_mapping] Error 1
make[1]: *** [CMakeFiles/Makefile2:1915: orb_slam3_pcl_mapping/CMakeFiles/pointcloud_mapping.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
CMake Warning at orb_slam3_pcl_mapping/CMakeLists.txt:169 (add_executable):
Cannot generate a safe runtime search path for target pointcloud_mapping
because files in some directories may conflict with libraries in implicit
directories:
runtime library [libopencv_calib3d.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_dnn.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_features2d.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_flann.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_highgui.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_ml.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_objdetect.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_photo.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_stitching.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_video.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_videoio.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_core.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_imgproc.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
runtime library [libopencv_imgcodecs.so.4.2] in /usr/lib/aarch64-linux-gnu may be hidden by files in:
/usr/local/lib
Some of these libraries may not be found correctly.
2.解决:
去到原来安装opencv4.6.0的build目录
sudo make uninstall
编译成功,但是出现下列警告,不知道是否有问题,等待更新
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
/usr/bin/ld: warning: libopencv_features2d.so.4.2, needed by /usr/lib/aarch64-linux-gnu/libopencv_calib3d.so.4.2.0, may conflict with libopencv_features2d.so.4.5
/usr/bin/ld: warning: libopencv_imgproc.so.4.5, needed by /usr/lib/aarch64-linux-gnu/libopencv_imgcodecs.so.4.5.4, may conflict with libopencv_imgproc.so.4.2
3 编译orb_slam3 ros包
我安装的是是opencv4.2.0 但是他找到的版本是4.5.4
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
[rosbuild] Including /opt/ros/noetic/share/roslisp/rosbuild/roslisp.cmake
[rosbuild] Including /opt/ros/noetic/share/roscpp/rosbuild/roscpp.cmake
[rosbuild] Including /opt/ros/noetic/share/rospy/rosbuild/rospy.cmake
Build type: Release
-- Performing Test COMPILER_SUPPORTS_CXX11
-- Performing Test COMPILER_SUPPORTS_CXX11 - Success
-- Performing Test COMPILER_SUPPORTS_CXX0X
-- Performing Test COMPILER_SUPPORTS_CXX0X - Success
-- Using flag -std=c++11.
-- Found OpenCV: /usr (found suitable version "4.5.4", minimum required is "4")
OPENCV VERSION:
4.5.4
-- Found OpenGL: /usr/lib/aarch64-linux-gnu/libOpenGL.so found components: OpenGL
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build
导致了以下问题:
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.4.5
[ 69%] Built target Mono_Inertial
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
[ 69%] Built target Mono
[ 76%] Linking CXX executable ../Stereo_Inertial
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.4.5
[ 76%] Built target Stereo_Inertial
[ 84%] Linking CXX executable ../MonoAR
[ 92%] Linking CXX executable ../Stereo
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.4.5
[ 92%] Built target MonoAR
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.4.5
[ 92%] Built target Stereo
[100%] Linking CXX executable ../RGBD
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.4.5
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.4.5
[100%] Built target RGBD
还是出了这个问题:
There are 1 cameras in the atlas
Camera 0 is pinhole
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.4) /home/ubuntu/build_opencv/opencv/modules/core/src/matrix.cpp:250: error: (-215:Assertion failed) s >= 0 in function 'setSize'
bash: line 1: 42342 Aborted (core dumped) rosrun ORB_SLAM3 RGBD /home/nvidia/ORB_SLAM3/Vocabulary/ORBvoc.txt /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/RealSense_D455.yaml
然后我在cmakelists.txt中加入了
set(OpenCV_DIR /home/nvidia/mylibs/opencv-4.2.0/build)
编译ros包的时候,报错
[rosbuild] Building package ORB_SLAM3
[rosbuild] using multiarch 'aarch64-linux-gnu' for finding Boost
CMake Deprecation Warning at /opt/ros/noetic/share/ros/core/rosbuild/public.cmake:366 (cmake_policy):
The OLD behavior for policy CMP0037 will be removed from a future version
of CMake.
The cmake-policies(7) manual explains that the OLD behaviors of all
policies are deprecated and that a policy should be set to OLD only under
specific short-term circumstances. Projects should be ported to the NEW
behavior and not rely on setting a policy to OLD.
Call Stack (most recent call first):
CMakeLists.txt:4 (rosbuild_init)
-- Using CATKIN_DEVEL_PREFIX: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/noetic
-- This workspace overlays: /opt/ros/noetic
-- Found PythonInterp: /usr/bin/python (found suitable version "3.8.10", minimum required is "3")
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/lib/python3/dist-packages/em.py
-- Using CATKIN_ENABLE_TESTING: ON
-- Skip enable_testing() for dry packages
-- Using CATKIN_TEST_RESULTS_DIR: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build/test_results
-- Forcing gtest/gmock from source, though one was otherwise available.
-- Found gtest sources under '/usr/src/googletest': gtests will be built
-- Found gmock sources under '/usr/src/googletest': gmock will be built
-- Found PythonInterp: /usr/bin/python (found version "3.8.10")
-- Using Python nosetests: /usr/bin/nosetests3
-- catkin 0.8.10
-- BUILD_SHARED_LIBS is on
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
[rosbuild] Including /opt/ros/noetic/share/roslisp/rosbuild/roslisp.cmake
[rosbuild] Including /opt/ros/noetic/share/roscpp/rosbuild/roscpp.cmake
[rosbuild] Including /opt/ros/noetic/share/rospy/rosbuild/rospy.cmake
Build type: Release
-- Using flag -std=c++11.
OPENCV VERSION:
4.2.0
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build
[ 0%] Built target rospack_genmsg_libexe
[ 0%] Built target rosbuild_precompile
[ 7%] Linking CXX executable ../Stereo_Inertial
[ 15%] Linking CXX executable ../Mono_Inertial
[ 23%] Linking CXX executable ../Stereo
[ 38%] Built target Mono
[ 46%] Linking CXX executable ../MonoAR
[ 53%] Linking CXX executable ../RGBD
/usr/bin/ld: CMakeFiles/Stereo_Inertial.dir/src/ros_stereo_inertial.cc.o: in function `main':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:124: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:124: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:124: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:124: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:124: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/Stereo_Inertial.dir/src/ros_stereo_inertial.cc.o:/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:124: more undefined references to `cv::Mat::Mat()' follow
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Stereo_Inertial.dir/build.make:175: ../Stereo_Inertial] Error 1
make[1]: *** [CMakeFiles/Makefile2:220: CMakeFiles/Stereo_Inertial.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: in function `cv::MatConstIterator::MatConstIterator(cv::Mat const*)':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:2279: undefined reference to `cv::Mat::total() const'
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: in function `cv::Mat_<float>::Mat_(int, int)':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:1288: undefined reference to `cv::Mat::Mat(int, int, int)'
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: in function `cv::Mat_<float>::Mat_(cv::Mat const&)':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:1338: undefined reference to `cv::Mat::Mat()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/RGBD.dir/build.make:175: ../RGBD] Error 1
make[1]: *** [CMakeFiles/Makefile2:815: CMakeFiles/RGBD.dir/all] Error 2
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ros_mono_ar.cc.o: in function `ImageGrabber::GrabImage(boost::shared_ptr<sensor_msgs::Image_<std::allocator<void> > const> const&)':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:153: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:154: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ros_mono_ar.cc.o: in function `__static_initialization_and_destruction_0(int, int)':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:44: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:45: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `ORB_SLAM3::ViewerAR::ViewerAR()':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:56: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o:/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:56: more undefined references to `cv::Mat::Mat()' follow
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `ORB_SLAM3::ViewerAR::DetectPlane(cv::Mat, std::vector<ORB_SLAM3::MapPoint*, std::allocator<ORB_SLAM3::MapPoint*> > const&, int)':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:440: undefined reference to `cv::Mat::Mat(int, int, int)'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:456: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:456: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:456: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `ORB_SLAM3::Plane::Plane(std::vector<ORB_SLAM3::MapPoint*, std::allocator<ORB_SLAM3::MapPoint*> > const&, cv::Mat const&)':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:513: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:513: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o:/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:513: more undefined references to `cv::Mat::Mat()' follow
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `ORB_SLAM3::Plane::Recompute()':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:524: undefined reference to `cv::Mat::Mat(int, int, int)'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:535: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:544: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:544: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:544: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `ORB_SLAM3::Plane::Plane(float const&, float const&, float const&, float const&, float const&, float const&)':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:608: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o:/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:608: more undefined references to `cv::Mat::Mat()' follow
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `cv::MatConstIterator::MatConstIterator(cv::Mat const*)':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:2279: undefined reference to `cv::Mat::total() const'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `cv::MatExpr::operator cv::Mat() const':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:3077: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `cv::Mat_<float>::Mat_(int, int)':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:1288: undefined reference to `cv::Mat::Mat(int, int, int)'
/usr/bin/ld: CMakeFiles/MonoAR.dir/src/AR/ViewerAR.cc.o: in function `cv::Mat_<float>::Mat_(cv::Mat const&)':
/usr/include/opencv4/opencv2/core/mat.inl.hpp:1338: undefined reference to `cv::Mat::Mat()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/MonoAR.dir/build.make:245: ../MonoAR] Error 1
make[1]: *** [CMakeFiles/Makefile2:599: CMakeFiles/MonoAR.dir/all] Error 2
/usr/bin/ld: CMakeFiles/Mono_Inertial.dir/src/ros_mono_inertial.cc.o: in function `ImageGrabber::SyncWithImu()':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_mono_inertial.cc:145: undefined reference to `cv::Mat::Mat()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Mono_Inertial.dir/build.make:175: ../Mono_Inertial] Error 1
make[1]: *** [CMakeFiles/Makefile2:842: CMakeFiles/Mono_Inertial.dir/all] Error 2
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: in function `main':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc:89: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc:89: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc:89: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc:89: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: /home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc:89: undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o:/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo.cc:89: more undefined references to `cv::Mat::Mat()' follow
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/Stereo.dir/build.make:175: ../Stereo] Error 1
make[1]: *** [CMakeFiles/Makefile2:626: CMakeFiles/Stereo.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
4 编译pointcloud_mapping,出现以下错误
-- +++ processing catkin package: 'pointcloud_mapping'
-- ==> add_subdirectory(orb_slam3_pcl_mapping)
-- Performing Test COMPILER_SUPPORTS_CXX11
-- Performing Test COMPILER_SUPPORTS_CXX11 - Success
-- Performing Test COMPILER_SUPPORTS_CXX0X
-- Performing Test COMPILER_SUPPORTS_CXX0X - Success
CMake Error at orb_slam3_pcl_mapping/CMakeLists.txt:30 (find_package):
Could not find a configuration file for package "OpenCV" that is compatible
with requested version "4.5.5".
The following configuration files were considered but not accepted:
/usr/local/lib/cmake/opencv4/OpenCVConfig.cmake, version: 4.2.0
/usr/lib/aarch64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake, version: 4.5.4
/lib/aarch64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake, version: 4.5.4
-- Configuring incomplete, errors occurred!
See also "/home/nvidia/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/nvidia/catkin_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed
4 解决:在cmakelist.txt中修改cv_bridge和opencv的路径(cv_bridge编译的时候也用的opencv4.2.0)
set(cv_bridge_DIR "/home/nvidia/UAV_map_module/devel/share/cv_bridge/cmake")
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
set(OpenCV_DIR /usr/local/lib/cmake/opencv4)
5 编译时加上cv::Mat Tcw,就会出现以下错误:
WARNING: Target "RGBD" requests linking to directory "/home/nvidia/mylibs/opencv-4.2.0/build/lib". Targets may link only to libraries. CMake is dropping the item.
[100%] Linking CXX executable ../RGBD
/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: in function `main':
/home/nvidia/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_rgbd.cc:83: undefined reference to `cv::Mat::Mat()'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/RGBD.dir/build.make:175: ../RGBD] Error 1
make[1]: *** [CMakeFiles/Makefile2:155: CMakeFiles/RGBD.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
将opencv版本换成3.4.8也会报错
6
-- Could NOT find compressed_image_transport (missing: compressed_image_transport_DIR)
-- Could not find the required component 'compressed_image_transport'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by
"compressed_image_transport" with any of the following names:
compressed_image_transportConfig.cmake
compressed_image_transport-config.cmake
Add the installation prefix of "compressed_image_transport" to
CMAKE_PREFIX_PATH or set "compressed_image_transport_DIR" to a directory
containing one of the above files. If "compressed_image_transport"
provides a separate development package or SDK, be sure it has been
installed.
6 解决:
把cmakelist.txt中的 find_package的compressed_image_transport删除,这个map包里面不需要这个
7 最终解决方案
opencv默认版本为4.5.4 (4.6.0也可以)正常编译orb_ros包可以编译通过,但是运行的适合报错,发现是cv_brideg与opencv版本冲突,解决方法:
https://blog.csdn.net/qq_41816368/article/details/133843917
这个包的devel/setup.bash 需要写进.bashrc中,当执行到:
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake) //在find_package前面
否则 编译的包找不到cv_bridge 报错