cartographer编译过程遇到未定义的dlclose@@GLIBC_2.2.5
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相关推荐
- [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走?
[js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走? 在浏览器环境下JS 解析器解析到未定义变量时,会抛出 Uncaught ReferenceError 错误,JS 引擎会停 ...
- 理解C语言(零) 导读(上):C程序的编译过程- 机器级表示
1 从Hello world说起 Hello world是初学者使用任何一项编程语言最基本最简单的程序.下面是一个C语言版的"Helloworld" : #include < ...
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- Hive SQL的编译过程
Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用.美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析.Hive的稳定性和 ...
- 【美团技术博客】Hive SQL的编译过程
转载自:http://tech.meituan.com/hive-sql-to-mapreduce.html Hive SQL的编译过程 木叶丸2014-02-12 17:30 Hive是基于Hado ...
- Compiler编译过程
Compiler编译过程 1.原理 编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做"本地"编译器.另外,编译器也可以生成 ...
- C C++的编译过程详解
C/C++编译过程 C/C++编译过程主要分为4个过程 1) 编译预处理 2) 编译.优化阶段 3) 汇编过程 4) 链接程序 一.编译预处理 (1)宏定义指令,如#define Name Token ...
- Dlib简介及在windows7 vs2013编译过程
Dlib是一个C++库,包含了许多机器学习算法.它是跨平台的,可以应用在Windows.Linux.Mac.embedded devices.mobile phones等.它的License是Boos ...
- golang源码分析:编译过程词法解析的流程
golang编译 由于golang作为静态语言,当使用go build时就会生成对应的编译完成之后的文件,那这个编译过程大致会做什么事情呢,在golang中的编译大致有哪些流程. golang示例代码 ...
最新文章
- 第五章 计算机故障诊断与排除
- source insight 深色主题配置文件
- DNS解释问题:java.net.UnknownHostException
- Python3 pygal 与 pygal_maps_world 绘制世界地图
- ironpython2.7_IronPython
- poj3579 Median
- 【原创】开车分四个阶段的话,你属于哪个
- 怎么在云服务器上建网站_如何在云服务器上部署自己的网站?
- 2018百度seo最新算法大全 青岛墨羽SEO统计
- 视频教程-射频工程师工作指南-无线通信
- win10任务栏设置——高效、美观!
- 笔记11-继承修饰符
- 用python中的turtle库画蜡笔小新
- 材料写作素材:关于“大”排比句40例
- flash actionscript MovieClip(电影剪辑)控制
- 矩阵快速幂(51nod)
- 2021年山东省安全员B证试题及解析及山东省安全员B证作业模拟考试
- 大学计算机学生要拿到的证书,大学一定要拿到的证书
- 新一代的 Python 包管理工具 -- PDM
- 环境艺术设计是计算机,【艺术设计论文】环境艺术设计计算机辅助设计研究(共5097字)...