今天编译一个工程,在目标机上运行app,出现了这个错误。
下面我们由这条报错信息入手,寻找问题的答案:
1.首先保证程序没有被strip,也就是说可执行程序含有符号表信息。
2.出现这个问题的原因是glibc的版本太低,查看系统glibc支持的版本
root@ubuntu:/dvr# strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_PRIVATE
发现系统支持的最高版本为GLIBC_2.15,显然不支持GLIBC_2.17。
3.使用反汇编命令objdump -p 查看库文件版本等信息,我们可以看到
root@ubuntu:/dvr# objdump -p hxht
Version References:
required from libpthread.so.0:
0x09691a75 0x00 05 GLIBC_2.2.5
required from libc.so.6:
0x06969194 0x00 10 GLIBC_2.14
0x06969195 0x00 09 GLIBC_2.15
0x0d696914 0x00 08 GLIBC_2.4
0x06969197 0x00 07 GLIBC_2.17
0x0d696917 0x00 06 GLIBC_2.7
0x09691a75 0x00 04 GLIBC_2.2.5
0x09691974 0x00 03 GLIBC_2.3.4
0x0d696913 0x00 02 GLIBC_2.3
4.nm 命令显示关于指定 File 中符号的信息
root@ubuntu:/dvr# nm hxht | grep GLIBC_2.17
U clock_gettime@@GLIBC_2.17
我们发现clock_gettime()这个函数使用了GLIBC_2.17
由此我们断定问题是由于clock_gettime()这个函数使用了GLIBC_2.17库所致
联系客服