cartographer与cartographer_ros源码ninja编译采坑及解决办法

在cartographer及cartograper_ros联合源码安装时,使用ninja在x64平台上进行编译会出现如下问题,

问题1

问题描述

提示" 无法添加符号: DSO missing from command line
collect2: error: ld returned 1 exit status",如下:

al/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread && :
/usr/bin/ld: /usr/local/lib/liblua.a(loadlib.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: 无法添加符号: DSO missing from command line
collect2: error: ld returned 1 exit status
[270/384] Building CXX object CMakeFiles/cartographer.mapping.map_builder_test.dir/cartographer/mapping/map_builder_test.cc.o
ninja: build stopped: subcommand failed.
<== Failed to process package 'cartographer': 
  Command '['ninja', '-j8', '-l8']' returned non-zero exit status 1

Reproduce this error by running:
==> cd /home/nie/cartographer_detailed_comments_ws/build_isolated/cartographer && ninja -j8 -l8

解决办法

修改src/cartographer下的CMakelists.txt文件,在find_package(LuaGoogle REQUIRED)后面添加
set(LUA_LIBRARIES “/usr/local/lib/liblua.a;/usr/lib/x86_64-linux-gnu/libdl.so”),如下:

find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})
find_package(Ceres REQUIRED COMPONENTS SuiteSparse)
find_package(Eigen3 REQUIRED)
find_package(LuaGoogle REQUIRED)
set(LUA_LIBRARIES "/usr/local/lib/liblua.a;/usr/lib/x86_64-linux-gnu/libdl.so")

问题2

问题描述

当解决好问题1后,编译到cartographer_rviz时提示"lua_newstate’ can not be used when making a shared object; recompile with -fPIC"的问题,如下:

absl_strings.a /usr/local/lib/libabsl_strings_internal.a /usr/local/lib/libabsl_throw_delegate.a /usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_dynamic_annotations.a /usr/local/lib/libabsl_spinlock_wait.a -lpthread /usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread && :
/usr/bin/ld: /usr/local/lib/liblua.a(lstate.o): relocation R_X86_64_PC32 against symbol `lua_newstate' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: 错误的值
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
<== Failed to process package 'cartographer_rviz': 
  Command '['/home/nie/cartographer_detailed_comments_ws/install_isolated/env.sh', 'ninja', '-j8', '-l8']' returned non-zero exit status 1

Reproduce this error by running:
==> cd /home/nie/cartographer_detailed_comments_ws/build_isolated/cartographer_rviz && /home/nie/cartographer_detailed_comments_ws/install_isolated/env.sh ninja -j8 -l8

解决办法

解决办法,重新安装lua5.3

curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux CFLAGS=-fPIC
sudo make install

注意,如果要二次编译lua5.3,记得要删除src下已经编译好的.o对象文件,再进行编译

cd lua-5.3.0/src
rm *.o
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要在ROS Noetic中安装Cartographer,可以按照以下步骤进行操作: 1. 首先,确保已经安装了ROS Noetic。如果没有安装,请先安装ROS Noetic。 2. 打开终端,输入以下命令来安装Cartographer: ``` sudo apt-get install -y python-wstool python-rosdep ninja-build ``` 3. 然后,创建一个工作空间并初始化wstool: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/cartographer-project/cartographer.git git clone https://github.com/cartographer-project/cartographer_ros.git cd .. rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y ``` 4. 编译Cartographer: ``` catkin_make_isolated --install --use-ninja ``` 5. 设置环境变量: ``` source ~/catkin_ws/install_isolated/setup.bash ``` 6. 测试Cartographer是否安装成功: ``` roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=`rospack find cartographer_ros`/test/backpack_2d/cartographer_paper_deutsches_museum.bag ``` 如果一切正常,Cartographer就已经成功安装了。 希望这些步骤能够帮助你安装Cartographer。 ### 回答2: 首先,安装ROS Noetic。ROS Noetic 是一个特定版本的ROS,我们需要先安装 ROS Noetic,才能安装 Cartographer。 安装完 ROS Noetic 后,接下来是安装 Cartographer。 1. 添加 Cartographer 的软件源: ```bash sudo apt-get install -y python-wstool python-rosdep ninja-build stow cd ~/ mkdir -p cartographer_ws/src cd cartographer_ws wstool init src wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall wstool update -t src ``` 2. 安装依赖: ```bash src/cartographer/scripts/install_proto3.sh sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src --rosdistro=noetic -y ``` 3. 编译 Cartographer: ```bash catkin_make_isolated --install --use-ninja source install_isolated/setup.bash ``` 现在,Cartographer 的安装就完成了! 如果要验证是否安装成功, 转到某个已经运行的用于创建地图的ROS包目录中,并以仿真方式运行数据采集: ```bash source /opt/ros/noetic/setup.bash source /path/to/your/catkin_ws/devel/setup.bash roslaunch your_mapping_package your_cartographer_mapping.launch bag_filename:=/path/to/your/input.bag ``` 注意,这是一个示例,有关使用Cartographer的详细说明将涉及更多内容,例如如何运行机器人,生成bag文件和使用主题等等,还有一些常见的参数,用于地图构建,对于不同的应用程序可以配置各种也是不一样的。 ### 回答3: ROS Noetic是ROS的最新版本,其中包含了许多新的功能和统一的开发环境,使得ROS的开发和运行更加高效可靠。CartographerROS下用于2D或3D SLAM的工具,其功能强大,使用也相对简单,是目前ROS下最受欢迎的SLAM算法之一。 那么如何在ROS Noetic中安装Cartographer呢?以下是一个简单的步骤: 1.首先,确保您已经安装了ROS Noetic并且ROS环境已经正常配置了,这可以通过运行以下几个命令来查看: $ echo $ROS_DISTRO noetic $ env | grep ROS 2.安装Cartographer依赖的一些库: $ sudo apt-get update $ sudo apt-get install -y python-wstool python-rosdep ninja-build $ sudo rosdep init $ rosdep update 3.使用wstool来获取Cartographer代码并建立软连接: $ cd ~/ $ mkdir catkin_ws $ cd catkin_ws/ $ wstool init src $ wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall $ wstool update -t src $ rm -rfv src/cartographer_ros/cartographer_ros/reading/* src/cartographer_ros/cartographer_ros/urdf/* src/cartographer_ros/cartographer_ros/tf/* src/cartographer_ros/cartographer_ros/msg/* src/cartographer_ros/cartographer_ros/srv/* $ rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y 4.编译Cartographer: $ sudo apt-get install -y google-mock libboost-all-dev $ sudo apt-get remove -y ros-${ROS_DISTRO}-catkin $ sudo apt-get install -y python-catkin-tools $ catkin_make_isolated --install --use-ninja 5.运行Cartographer: $ source ~/catkin_ws/install_isolated/setup.bash $ roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag 以上就是在ROS Noetic上安装Cartographer的简单步骤,当然,如果你是第一次安装ROSCartographer,在这个过程中可能会遇到一些错误,不过不要紧,通过搜索搜索引擎,或者参考Cartographer官方文档,你一定能够顺利完成安装。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值