ubuntu20.04(ros-noetic)编译cartographer出现undefined reference to `absl::lts_20211102问题的解决办法

        最近需要在ubuntu20.04下编译cartographer,编译方法参照如下链接:Compiling Cartographer ROS — Cartographer ROS documentation

在运行catkin_make_isolated --install --use-ninja后出现undefined reference to `absl::lts_20211102等系列问题,排查后发现是absl库在编译时没有使用c++17编译而导致的,为了解决这个问题:

1、首先需要将安装好的absl库卸载掉:

        可以使用sudo apt-get remove ros-noetic-abseil-cpp命令,卸载ros自带的absl库,可能会提示找不到absl库,那么需要进入/usr/local目录下,全局搜索absl相关库文件,一般会在/usr/local/include、/usr/local/lib、/usr/local/lib/pkgconfig、/usr/local/lib/cmake、/usr/local/stow等目录中,可以使用sudo rm -rf /usr/local/include/absl删除文件夹或文件,也可以使用sudo rm -rf /usr/local/lib/libabsl_*一键删除具有相同后缀的文件。

2、升级cmake至3.20以上版本,注意如果直接卸载已经安装的cmake可能会损坏ros结构,升级cmake具体操作参考https://blog.csdn.net/weixin_41946146/article/details/123088664

3、修改src/cartographer/scripts/install_abseil.sh命令,强制使用c++17编译,修改后文件如下:

set -o errexit
set -o verbose

git clone https://github.com/abseil/abseil-cpp.git
cd abseil-cpp
git checkout 215105818dfde3174fe799600bb0f3cae233d0bf # 20211102.0
mkdir build
cd build
cmake -G Ninja \
  -DCMAKE_CXX_STANDARD=17 \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
  -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
  ..
ninja
sudo ninja install
cd /usr/local/stow
sudo stow absl

主要是添加了-DCMAKE_CXX_STANDARD=17 这句话。

4、修改src/cartographer/scripts/install_abseil.sh后再执行该命令,完成absl编译,再执行如下命令继续编译cartographer:

catkin_make_isolated --install --use-ninja

你可能感兴趣的:(cartographer,ros,SLAM,linux,运维,服务器)