Cartographer编译方法及编译出错(glog库链接错误)解决方法

2023-05-16

最近在重新调试Carto代码,想把自己的代码加入到Carto中,原本想在IDE中调试,然而Carto编译方式比较奇葩(

catkin_make_isolated --install --use-ninja)试了Clion、VScode、Qt(ros版)编译都会出问题。

不过Clion讲道理应该是可以编译的,不过要安装插件,由于我的版本太低了,就放弃了。具体参考https://github.com/larics/cartographer_superbuild。

最后只能在命令行编译,使用glog将中间变量值保存下来用来调试,有更好的调试方法的小伙伴可以留言~

按照官网步骤按照完成好Carto,参考

https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html

编译完成并没有报错,然而在跑例程的时候节点会直接死掉

roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=/home/le/b2-2016-04-05-14-44-52.bag 
... logging to /home/le/.ros/log/b7666ebc-0b88-11ea-a0d3-1831bf0f22e1/roslaunch-God-9181.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://localhost:41953/

SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.14
 * /use_sim_time: True

NODES
  /
    cartographer_occupancy_grid_node (cartographer_ros/cartographer_occupancy_grid_node)
    cartographer_offline_node (cartographer_ros/cartographer_offline_node)
    rviz (rviz/rviz)

ROS_MASTER_URI=http://localhost:11311

WARNING: Package name "GNSS_INS" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits, underscores, and dashes.
process[rviz-1]: started with pid [9198]
process[cartographer_occupancy_grid_node-2]: started with pid [9199]
process[cartographer_offline_node-3]: started with pid [9200]
/home/le/cartographer/install_isolated/lib/cartographer_ros/cartographer_offline_node: symbol lookup error: /home/le/cartographer/install_isolated/lib/cartographer_ros/cartographer_offline_node: undefined symbol: _ZN6google7LogSink8ToStringB5cxx11EiPKciPK2tmS2_mi
[cartographer_offline_node-3] process has died [pid 9200, exit code 127, cmd /home/le/cartographer/install_isolated/lib/cartographer_ros/cartographer_offline_node -configuration_directory /home/le/cartographer/install_isolated/share/cartographer_ros/configuration_files -configuration_basenames backpack_2d.lua -urdf_filenames /home/le/cartographer/install_isolated/share/cartographer_ros/urdf/backpack_2d.urdf -bag_filenames /home/le/b2-2016-04-05-14-44-52.bag echoes:=horizontal_laser_2d __name:=cartographer_offline_node __log:=/home/le/.ros/log/b7666ebc-0b88-11ea-a0d3-1831bf0f22e1/cartographer_offline_node-3.log].
log file: /home/le/.ros/log/b7666ebc-0b88-11ea-a0d3-1831bf0f22e1/cartographer_offline_node-3*.log

其中symbol lookup error表示没有链接到指定库上,然而查看多次都可以看见已经安装了glog库

又重新将Carto编译了一遍,然后在编译过程中出现如下失败,但是编译可以通过,之前并没有发现

 Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
-- Failed to find an installed/exported CMake configuration for gflags, will perform search for installed gflags components.
-- Performing Test GFLAGS_IN_GOOGLE_NAMESPACE
-- Performing Test GFLAGS_IN_GOOGLE_NAMESPACE - Success
-- Found Gflags: /usr/include  
-- Found Google Flags header in: /usr/include, in namespace: google
-- No preference for use of exported glog CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported glog CMake configuration if available.
-- Failed to find installed glog CMake configuration, searching for glog build directories exported with CMake.
-- Failed to find an installed/exported CMake configuration for glog, will perform search for installed glog components.
-- Found Glog: /usr/local/include  
-- Found Google Log (glog). Assuming glog was built with gflags support as gflags was found. This will make gflags a public dependency of Ceres.
-- Building with OpenMP.
-- Performing Test COMPILER_HAS_CXX11_FLAG
-- Performing Test COMPILER_HAS_CXX11_FLAG - Success
-- Looking for C++ include unordered_map
-- Looking for C++ include unordered_map - not found
-- Looking for C++ include tr1/unordered_map
-- Looking for C++ include tr1/unordered_map - found
-- Found tr1/unordered_map/set in std::tr1 namespace.
-- Looking for C++ include memory
-- Looking for C++ include memory - found
-- Performing Test HAVE_SHARED_PTR_IN_STD_NAMESPACE
-- Performing Test HAVE_SHARED_PTR_IN_STD_NAMESPACE - Failed
-- Performing Test HAVE_SHARED_PTR_IN_TR1_NAMESPACE
-- Performing Test HAVE_SHARED_PTR_IN_TR1_NAMESPACE - Failed
-- Looking for C++ include tr1/memory
-- Looking for C++ include tr1/memory - found
-- Performing Test HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER
-- Performing Test HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER - Success
-- Found shared_ptr in std::tr1 namespace using <tr1/memory> header.
-- Building Ceres as a static library.

后来分析发现,比较坑爹的是 carto中的库,无论是abls还是glog都是使用它自己稍微有点改动的,并不是普通的那种,找了一下午加一晚上终于发现了问题

到~/cartographer/install_isolated/lib/cartographer_ros文件夹下,使用ldd命令查看ros节点对应的链接库

 ldd cartographer_node |grep glog

得到输出(这个是修改好的正确的,之前报错的时候,库链接到的是usr/local里面自己下载的部分)

libglog.so.0 => /usr/lib/x86_64-linux-gnu/libglog.so.0 (0x00007f38d53a2000)

 可以修改cmakelist改变库的链接 或者将原本多安装的其他版本的glog库卸载

卸载的方法可以底下的参考博客,要根据你的安装方法来卸载

1、使用sudo apt-get install libgoogle-glog-dev安装则可以直接使用sudo apt-get remove libgoogle-glog-dev来卸载,比较方便

2、如果像我一样使用的是源码安装的话,则可以先通过

locate glog

来确定安装位置,一般是在

~$ locate glog
/usr/local/include/glog
/usr/local/include/glog/config.h
/usr/local/include/glog/log_severity.h
/usr/local/include/glog/logging.h
/usr/local/include/glog/raw_logging.h
/usr/local/include/glog/stl_logging.h
/usr/local/include/glog/vlog_is_on.h
/usr/local/lib/libglog.a
/usr/local/lib/cmake/glog

接着执行

sudo rm -rf /usr/local/include/glog/
sudo rm -rf /usr/local/lib/libglog*

就成功把glog卸载了

之后再将这三个文件夹删除再重新编译一般carto即可

Caption

 

 

参考

https://answers.ros.org/question/300549/failed-to-install-google-cartographer/

https://blog.csdn.net/guangyacyb/article/details/85165231

https://blog.csdn.net/u012348774/article/details/80620685

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cartographer编译方法及编译出错(glog库链接错误)解决方法 的相关文章

  • C++多线程面向对象封装

    相信很多人都读过 C 43 43 沉思录 这本经典著作 xff0c 在我艰难地读完整本书后 xff0c 留给我印象最深的只有一句话 xff1a 用类表示概念 xff0c 用类解决问题 关 于多线程编程 xff0c 如果不是特别需要 xff0
  • stm32(寄存器)超声波程序

    我们是基于stm32f103系列 xff0c 超声波模块用的是 xff1a HC SR04 寄存器版的代码 编译器用的是 xff1a keil5 在此 xff1a 输入捕获用的是TIM2 CH1 用的是PA0 xff0c 可以从开发板原理图
  • 127.0.0.1和localhost和本机IP三者的区别!!!

    1 xff0c 什么是环回地址 xff1f xff1f 与127 0 0 1的区别呢 xff1f xff1f 环回地址是主机用于向自身发送通信的一个特殊地址 xff08 也就是一个特殊的目的地址 xff09 可以这么说 xff1a 同一台主
  • malloc函数,大大的详解

    很多学过C的人对malloc都不是很了解 xff0c 知道使用malloc要加头文件 知道malloc是分配一块连续的内存 xff0c 知道和free函数是一起用的 但是但是 xff1a 一部分人还是将 xff1a malloc当作系统所提
  • Windows程序内部运行原理

    本文大部分内容都是摘自孙鑫老师 xff0c 在下就是一个简单的总结 xff0c 归纳 xff0c 希望对大家有用 xff01 xff01 xff01 xff01 Windows操作系统是一种完全不同于传统的dos方式的程序设计方法 xff0
  • the english of the simple view

    自述 xff1a 我的英语很差 xff0c 四级至今没有过 xff0c 在新东方报班学的一些东西 xff0c 只是想着简单的记录下来 xff0c 权当做新一次的整理笔记 xff0c 归纳 xff0c 希望也能帮助大家 1 200个核心词汇
  • 小小鉴赏(闹着玩)

    when you believe xff1a 作曲 Stephen Schwartz 作词 Stephen Schwartz Many xff08 span class hljs attribute 39 meni span xff09 n
  • 技术分享 | GPS无人机集群

    随着人工智能的发展 xff0c 机器人行业也进入了高速发展的阶段 xff0c 在今年春晚 xff0c 也出现了无人机的身影 xff0c 在高速发展的同时 xff0c 也让人们逐渐体会到单机器人能做的事情是有限的 xff0c 多机器人 编队
  • 技术分享 | 开源不稳?试试DJI N3飞控呢

    原创阿木实验室 1 DJI N3飞控简介 N3内置双IMU冗余设置 xff0c 结合在线故障检测算法 xff0c 可实现双IMU数据实时互为备份 xff0c 极大地提高了飞行器可靠性 集成8GB工业级SD卡的 黑匣子 数据记录系统 xff0
  • 技术分享 | P450-详解室内外指点飞行来啦

    原理说明 PX4飞控控制系统图 定点飞行就是由传感器 xff08 T265 GPS xff09 获得当前位置数据 xff0c 并且把当前位置作为期望位置 xff0c 即可实现定点飞行 xff0c 此时飞控处于position模式 指点飞行为
  • 技术分享 | P450-圆框跟踪的干货分享

    圆检测流程 xff1a 1 xff0c 利用高斯滤波做预处理 2 xff0c 边界检测部分用到了自适应Canny检测 3 xff0c 将边界分为凹弧和凸弧 xff0c 根据输入参数筛选弧段 4 xff0c 利用弧段来估计椭圆参数 xff0c
  • Linux Xampp 下安装PHP Redis扩展

    cd usr local wget http pecl php net get redis 4 0 1 tgz tar zxvf redis 4 0 1 tgz cd usr local wget http mirrors kernel o
  • 技术分享 | Prometheus(P450)-室内外避障

    原理说明 Astar进行全局路径规划 全局路径规划 1 全局算法和局部算法 全局路径规划是在已知的环境中 xff0c 给机器人规划一条路径 xff0c 路径规划的精度取决于环境获取的准确度 xff0c 全局路径规划可以找到最优解 xff0c
  • PX4官方动态 | 基于FPGA和px4的精准自主降落

    近期Ramon Roche在Twitter上发布了关于使用FPGA实现无人机在目标物体上能够进行精准自主着陆的推文 这次的功能实现是一个在读博士的学生所做的项目 xff0c 希望能在开源社区中得到推广并吸引其余有意向的开发者能一起进行研究
  • 技术分享 | 带你具体部署VINS_FUSION_GPU版本

    前期准备工作已经完成 xff0c 接下来我们就准备VINS在NX的落地 1 下载源码编译 首先VINS gpu版本需要引入OpenCV CUDA版本的加速 xff0c 由于我们的NX镜像已经安装好CUDA xff0c 这里就不在赘叙 xff
  • PX4官方动态 | 带你走进官方教学(二)

    本期是我们第二期官方教学 xff0c 不知道大家有没有跟着我们一起学习第一期的教学呢 xff0c 如果没有看过的同学可以点击链接进行第一期的学习后再来看我们第二期内容 在第一期我们告诉了大家学习方法 xff0c 以及如果从零开始使用PX4自
  • 吊舱追踪 | 车机协同作战小实验

    大家好 xff0c 我是阿木实验室的梓衡 xff0c 今天为大家带来的是我们最新研发的智能吊舱的测试 首先 xff0c 我们会把小吊舱挂载在P450无人机上 xff0c 我们所选择的地面追踪目标是我们的R300无人车 这个吊舱搭载了200W
  • 工实小报 | P450室外首飞教学

    本文将给大家介绍我们P450无人机在进行室外首次飞行时 xff0c 一些常见的注意事项及正确的使用方法 我们在使用这种PX4开源无人机时 xff0c 一定要有一个清楚的认识 它和大疆那种消费级无人机在使用和操作上 xff0c 是有非常大的不
  • 5G时代,将为无人机通讯传输带来哪些新变化?

    众所周知 xff0c 我们正在大步迈向5G时代 xff0c 在近几年的各类媒体关于5G的报道也络绎不绝 与此同时 xff0c 无人机作为空中人工智能领域的 智慧眼 xff0c 其行业应用迅速发展 xff0c 应用需求不断增加 xff0c 对
  • 超小型吊舱它来了,轻松适配多种移动机器人使用场景

    一 设计理念 在无人机 无人车 机器狗等移动机器人场景中 xff0c 往往需要一款小巧 重量轻 成本可控的三轴云台吊舱来实现无人机的航拍 机器人搜寻以及图像识别等功能 而市面上的云台吊舱体积都比较大 xff0c 一些小型增稳云台也不支持角度

随机推荐