解决交叉编译连接器包含-ldl编译选项,但仍然报错undefined reference to ‘__dlsym‘
交叉编译连接器包含-ldl编译选项,但仍然报错undefined reference to ‘__dlsym‘
文章目录
- 交叉编译连接器包含-ldl编译选项,但仍然报错undefined reference to ‘__dlsym‘
- 问题排查
- 成因
- 反思
问题排查
为TX2交叉编译最新版本的BehaviorTree.Cpp库,使用cmake第一次编译BehaviorTree.Cpp的时候,生成behaviortree_cpp_v3.so时报出警告
warning: Using 'dlopen' in statically linked applications requires at runtime the shared library from the glibc version used for linking
虽然报出了这个警告,但是至少behaviortree_cpp_v3.so是生成出来了,只是后面的几个测试程序生成却报错:
../libbehaviortree_cpp_v3.so: undefined reference to '__dlsym'
../libbehaviortree_cpp_v3.so: undefined reference to '__dlopen'
../libbehaviortree_cpp_v3.so: undefined reference to '__dlclose'
../libbehaviortree_cpp_v3.so: undefined reference to '__dlerror'
不仅如此,将这个有问题的libbehaviortree_cpp_v3.so拿去给自己的程序使用仍然报找不到符号的错误。
去tx2的sysroot中找libdl.so
发现在/lib/aarch64-linux-gnu/libdl.so.2,查看导出动态链接符号
$ objdump -T libdl.so.2
0000000000000000 g DO .text 00000000000000cc GLIBC_2.17 dlsym
0000000000000000 g DO .text 000000000000002c GLIBC_2.17 dladdr
libdl.so则在tx2的sysroot中的/usr/lib/aarch64-linux-gnu/libdl.so
问题出在这里
libdl.so指向了/lib/aarch64-linux-gnu/libdl.so.2
,这在TX2目标机上运行是没问题的,但是在host中,根本不存在这个文件。
交叉编译工具链需要的是包含了tx2-sysroot的位置即${tx2-sysroot}/lib/aarch64-linux-gnu/libdl.so.2
。
为了能够兼容目标和主机,修正libdl.so符号链接ln -sf ../../../lib/aarch64-linux-gnu/libdl.so.2 libdl.so.2
再次重新编译BehaviorTree.CPP一切正常。
成因
回顾前面在编译libbehaviortree_cpp_v3.so的时候报出的警告
warning: Using 'dlopen' in statically linked applications requires at runtime the shared library from the glibc version used for linking
其实已经提示了,没有找到动态库,作为代替使用了/lib/aarch64-linux-gnu/libdl.a
,但静态库的符号默认是位置相关的,并且其符号名也是另外一套规则
$ objdump -t libdl.a
dlsym.o: file format elf64-littleSYMBOL TABLE:
0000000000000000 l .text 0000000000000000 $x
0000000000000000 l d .text 0000000000000000 .text
0000000000000000 l d .data 0000000000000000 .data
0000000000000000 l d .bss 0000000000000000 .bss
0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack
0000000000000000 w F .text 0000000000000000 dlsym
0000000000000000 *UND* 0000000000000000 __dlsym
看到那个__dlsym
了没有
反思
说过无数次不要忽视任何警告,对待警告,就要如同对待错误一样。
这次出现的问题再一次印证了这句话。
解决交叉编译连接器包含-ldl编译选项,但仍然报错undefined reference to ‘__dlsym‘相关推荐
- 记录一个CMake编译报错undefined reference to vtable问题的解决
在编写一个简单的CMake demo: 问题描述 文件结构如下:头文件和cpp分别放在两个文件夹下面 如果使用下面的写法,会报错"undefined reference to vtable ...
- Clion使用Socket报错undefined reference to `__imp_WSAStartup‘(解决办法)
根据哔哩哔哩上的视频,使用Clion写一个Socket的服务器,但是当写完之后发现并不能运行,程序报错. ====================[ 构建 | MyHttpd | Debug ]=== ...
- MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题
MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 参考文章: (1)MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 (2)https://ww ...
- 解决使用requests_html模块,html.render()下载chromium报错、速度慢问题
解决使用requests_html模块,html.render()下载chromium报错.速度慢问题 参考文章: (1)解决使用requests_html模块,html.render()下载chro ...
- 解决vs2015使用fopen、fprintf等函数报错的问题
解决vs2015使用fopen.fprintf等函数报错的问题 参考文章: (1)解决vs2015使用fopen.fprintf等函数报错的问题 (2)https://www.cnblogs.com/ ...
- 解决使用mybatis分页插件PageHelper的一个报错问题
解决使用mybatis分页插件PageHelper的一个报错问题 参考文章: (1)解决使用mybatis分页插件PageHelper的一个报错问题 (2)https://www.cnblogs.co ...
- 解决Windows下运行php Composer出现SSL报错的问题
解决Windows下运行php Composer出现SSL报错的问题 2015-01-14 20:05 在windows下运行composer却出现SSL报错: E:\www>php -f co ...
- springboot导入项目依赖报错_如何解决spring boot 项目导入依赖后代码报错问题
如何解决spring boot 项目导入依赖后代码报错问题 2020-08-15 14:17:18 代码截图如图所示(由于本人问题已经解决,没来得及截图,所以在网上找了一张图片) 针对图中所示的 ...
- 解决“(1146, “Table ‘mydb.django_session‘ doesn‘t exist“)”报错的方法
解决"(1146, "Table 'mydb.django_session' doesn't exist")"报错的方法 参考文章: (1)解决"(1 ...
最新文章
- 嵌入式系统linux之光标隐藏解决
- Python入门篇-functools
- netty初探(2)
- 机房空调制冷、加热、加湿、除湿这些功能如何应用?
- copy_{to, from}_user()的思考
- 分享Silverlight/WPF/Windows Phone一周学习导读(11月14日-11月20日)
- 学硕论文选题计算机,计算机硕士论文题目分享
- 如何修改WP文章字体格式、字号大小、字体颜色
- 这位辩手,你想试试线上语音 battle 么?
- 僵尸启示录开始 Scheming Through Ep1 Mac游戏介绍
- android软件安装到平板,新人看过来 安卓平板装机必备软件推荐
- 日常开发中,String类中常用的方法
- frp frpc,frps开机自动运行 ubuntu
- sipp脚本撰写(二)
- 怎么从安卓设备转移数据到苹果_如何将数据从安卓手机转移到苹果手机
- 洛谷 P1873 砍树 (二分答案)
- php a链接跳转下载,PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件...
- Entity Framework Core系列教程-3为现有数据库生成实体模型
- 关于BRDF公式理解的笔记
- 这10个问题帮你搞清楚SaaS是什么
热门文章
- c语言进程控制实验报告,操作系统进程的创建与控制实验报告.doc
- pink老师28-综合案例-新闻页面文字部分和图片
- 阿里巴巴“数据库侠客”:此行路远,不问归期
- MAC BigSur 版本11以上安装Adobe软件报程序包错误damage解决方案
- 远程控制软件哪个好用?
- 数据分析:消费者数据分析
- android banner广告接入,仅涉及技术
- linux icon图标大小,适用于Linux的5款最佳桌面图标集
- 为什么要学习----------[澳大利亚]安德鲁·马修斯
- 对口高考计算机原理,对口高考计算机原理-5.doc