1. 使用的安装过程如下:

先装下这下面几个依赖
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build1. cartographer,cartographer_ros,ceres-solver放在工作空间的src目录下2. protobuf放在工作空间下3. 编译指令:catkin_make_isolated --install --use-ninja

一些相关的以来安装完成后,进行了lua的安装, 下载lua,我的版本是3.5,基本上就是按照官网的教程(在下载后的doc文件夹)

//编译生成linux版本
cd lua-5.3.0
make linux
//安装
sudo make install
//测试是否安装成功
make test
//如果可以输出lua的版本,即表示安装成功;

接下来用catkin_make_isolated 进行carto的编译,但是编译时遇到问题如下:

/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: error adding symbols: DSO missing from command line​

从报的错误上直接分析就是carto用到了lua.a的静态库,但是lua.a中的dlclose没有找到,同时libdl.so.2遇到了DSO missing的问题;

更细节的DSO missing原因我不清楚,但是一般这种错误就是库的链接出了问题;

我检查了自己电脑上的libdl.so文件,发现几个地方如下:

/usr/lib/x86_64-linux-gnu/libdl.so
//lib/x86_64-linux-gnu/libdl.so.2
//lib/x86_64-linux-gnu/libdl-2.23.so

carto在编译的过程中找到的是第二个路径,接下来尝试了几种方法都是错误的,翻到最后可以直接查看正确的修改;

1. 尝试建立软连接,最开始没有找到libdl.so.2, 于是在/usr/lib/x86_64-linux-gnu/ 下用ln -s 建立了一个新的链接libdl.so.2;但事实证明这种方法是错误的,因为carto根本不会找到这个文件;

2.尝试在编译lua的时候人为地添加libdl;

make linux MYLIBS=/usr/lib/x86_64-linux-gnu/libdl.so

按照lua的官网讲解,可以通过MYLIBS添加自己想添加的库,这样编译后确实也添加成功了,但是再次运行carto还是会报同样的错误;

3. 正确答案:参照了网站https://github.com/awesomeWM/awesome/issues/1664中psychon的回答:

我不太清楚他们跑的awesome是什么PROJECT,但是遇到的问题大概类似,在答案中有这样一种解释:

The problem is due to:

  • Static libraries do not carry dependency information
  • CMake's FindLua does not detect a statically built Lua depending on libdl.

I have searched around for this issue and it did come up once in #361 so I tried running CMAKE_ARGS="-DLUA_LIBRARY=/usr/local/lib/liblua.a;dl" make but then I get:

Try -DLUA_LIBRARY=/usr/local/lib/liblua.a\;/usr/lib/libdl.so, assuming that is the path to your libdl.

我的理解是静态库并不会带着自己的依赖项过来,而CMAKELISTS中的findpackage找到的lua的库并不会带着关于lindl.so.2的链接;所以在编译carto的时候系统会随机地找对应的依赖项,这样就找到了//lib/下的libdl.so.2;

理解不知道正确与否,按照这个解释,其实是需要我们自己认为指定一下libdl.so的路径的,他给出的答案-DLUA_LIBRARY使用于命令行安装,但是我们这里需要的是修改CMAKELIST

于是,找到src/cartographer下的CMakelists.txt文件,在find_package(LuaGoogle REQUIRED)后面添加

set(LUA_LIBRARIES "/usr/local/lib/liblua.a;/usr/lib/x86_64-linux-gnu/libdl.so")

因为后面target_link_libraries() 中使用到的都是LUA_LIBRARIES,因此,这样相当于人为地将libdl.so添加到可执行文件的生成过程;

至此,carto就可以编译成功;

有问题欢迎留言交流 :)附上:libdl.so的基本使用的小结

只需要记住一个头文件,和四个函数即可:
头文件:#include <dlfcn.h>四个函数:
dlopen//打开一个动态库
dlsym//在打开的动态库里找一个函数
dlclose//关闭动态库
dlerror//返回错误
来自:https://blog.csdn.net/hjd_love_zzt/article/details/18950351

cartographer编译过程遇到未定义的dlclose@@GLIBC_2.2.5相关推荐

  1. [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走?

    [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走? 在浏览器环境下JS 解析器解析到未定义变量时,会抛出 Uncaught ReferenceError 错误,JS 引擎会停 ...

  2. 理解C语言(零) 导读(上):C程序的编译过程- 机器级表示

    1 从Hello world说起 Hello world是初学者使用任何一项编程语言最基本最简单的程序.下面是一个C语言版的"Helloworld" : #include < ...

  3. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  4. Hive SQL的编译过程

    Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.Hive的稳定性和 ...

  5. 【美团技术博客】Hive SQL的编译过程

    转载自:http://tech.meituan.com/hive-sql-to-mapreduce.html Hive SQL的编译过程 木叶丸2014-02-12 17:30 Hive是基于Hado ...

  6. Compiler编译过程

    Compiler编译过程 1.原理 编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做"本地"编译器.另外,编译器也可以生成 ...

  7. C C++的编译过程详解

    C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译预处理 2) 编译.优化阶段 3) 汇编过程 4) 链接程序 一.编译预处理 (1)宏定义指令,如#define Name Token ...

  8. Dlib简介及在windows7 vs2013编译过程

    Dlib是一个C++库,包含了许多机器学习算法.它是跨平台的,可以应用在Windows.Linux.Mac.embedded devices.mobile phones等.它的License是Boos ...

  9. golang源码分析:编译过程词法解析的流程

    golang编译 由于golang作为静态语言,当使用go build时就会生成对应的编译完成之后的文件,那这个编译过程大致会做什么事情呢,在golang中的编译大致有哪些流程. golang示例代码 ...

最新文章

  1. 第五章 计算机故障诊断与排除
  2. source insight 深色主题配置文件
  3. DNS解释问题:java.net.UnknownHostException
  4. Python3 pygal 与 pygal_maps_world 绘制世界地图
  5. ironpython2.7_IronPython
  6. poj3579 Median
  7. 【原创】开车分四个阶段的话,你属于哪个
  8. 怎么在云服务器上建网站_如何在云服务器上部署自己的网站?
  9. 2018百度seo最新算法大全 青岛墨羽SEO统计
  10. 视频教程-射频工程师工作指南-无线通信
  11. win10任务栏设置——高效、美观!
  12. 笔记11-继承修饰符
  13. 用python中的turtle库画蜡笔小新
  14. 材料写作素材:关于“大”排比句40例
  15. flash actionscript MovieClip(电影剪辑)控制
  16. 矩阵快速幂(51nod)
  17. 2021年山东省安全员B证试题及解析及山东省安全员B证作业模拟考试
  18. 大学计算机学生要拿到的证书,大学一定要拿到的证书
  19. 新一代的 Python 包管理工具 -- PDM
  20. 环境艺术设计是计算机,【艺术设计论文】环境艺术设计计算机辅助设计研究(共5097字)...

热门文章

  1. 51nod-1337:翻转游戏
  2. matlab intersect
  3. Java将excel文件转成json文件(有错误)
  4. 消息 15135,级别 16,状态 8,过程 sp_addextendedproperty,对象无效。不允许有扩展属性,或对象不存在。...
  5. 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1
  6. RedisUtil工具类
  7. 获取Oracle隐含參数信息
  8. 极验滑动验证码破解分析
  9. web前端性能调优(转载)
  10. 课堂练习--最大子数组和