在进行./ build_ros. sh时一直报错,实在是不知道该怎么办了。

关注引自免费微信小程序:皆我百晓生
针对您在运行ORB-SLAM2过程中遇到的问题,我将为您提供详细的解决步骤。以下是您所报告错误的分析及相应的解决方案:
错误分析:
Eigen库相关警告:
/usr/local/include/eigen3/Eigen/src/Core/util/Constants.h:167:37: note: declared here
EIGEN_DEPRECATED const unsigned int AlignedBit = 0x80;
这是一个关于Eigen库的编译警告,表示某个常量已弃用。虽然它不会导致编译失败,但建议更新或配置您的Eigen库以消除警告。
OpenCV版本冲突:
/usr/bin/ld: warning: libopencv_imgproc.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
...
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0: error adding symbols: DSO missing from command line
...
undefined reference to `cv::putText(cv::_InputOutputArray const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::Point_<int>, double, int, cv::Scalar_<double>, int, bool)'
错误提示表明存在OpenCV版本冲突,且编译过程中缺少对cv::putText函数的引用。这是由于系统同时安装了OpenCV 3.4和OpenCV 4.2,并且在链接阶段未能正确找到所需的库文件。ORB-SLAM2要求使用OpenCV 3.4.10,而系统默认链接了更高版本的OpenCV库。
解决方案:
处理Eigen库警告:
-Wno-deprecated-declarations 编译选项来忽略此警告。例如,在CMakeLists.txt的顶部(或适当位置)添加以下行:
add_compile_options(-Wno-deprecated-declarations)
解决OpenCV版本冲突:
卸载OpenCV 4.2: 使用以下命令卸载系统中的OpenCV 4.2:
sudo apt-get remove 'libopencv*'
sudo apt-get autoremove
安装OpenCV 3.4.10: 首先添加OpenCV 3.4的源(适用于Ubuntu 18.04及以上版本):
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu bionic-security main"
sudo apt update
然后安装OpenCV 3.4.10及其依赖:
sudo apt install libopencv-dev libopencv-imgcodecs-dev libopencv-highgui-dev libopencv-calib3d-dev libopencv-features2d-dev libopencv-video-dev libopencv-videoio-dev libopencv-videostab-dev libopencv-objdetect-dev libopencv-stitching-dev libopencv-flann-dev libopencv-core-dev libopencv-imgproc-dev
清理并重新编译ORB-SLAM2: 清除ORB-SLAM2的旧编译结果:
cd ~/ORB_SLAM2
rm -rf build
然后重新运行构建脚本:
./build_ros.sh
按照上述步骤操作后,应该可以解决Eigen库警告和OpenCV版本冲突的问题,使ORB-SLAM2在ROS环境下成功编译。如果您在执行过程中遇到其他问题,欢迎继续提问。