相关问题汇总

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能够正常运行

相关资料:

xcv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\matrix.cpp:246: error: (-215:Assertion failed) s >= 0 in function 'cv::setSize' - 我爱学习网 (5axxw.com)

后面换成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 报错

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值