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

5 篇文章 0 订阅
3 篇文章 0 订阅

        最近需要在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

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值