工作案例分析:/lib/liblzma.so.5: no version information available
问题描述
今天接到一个产品的反馈,问题是执行 dpdk 网卡绑定脚本时候会一直打印如下内容:
/usr/sbin/lspci:/lib/liblzma.so.5: no version information available (required by /lib64`/libkmod.so.2)
沟通确认这个问题是更新了我们的一个组件只有出现的问题,以前没得。
初步定位过程
单独执行 lspci 命令并没有打印,然后使用 strace 跟踪 dpdk 网卡绑定脚本确认是如下命令行执行的时候的打印:
/usr/sbin/lspci -vmmks 0000:02:00.2
执行 strace /usr/sbin/lspci -vmmks 0000:02:00.2 跟踪 lspci 执行过程,获取到下面这些与 liblzma.so.5 有关的内容:
open("/lib/liblzma.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200.\0\0\0\0\0\0"..., 832) = 832
.........
close(3) = 0
lspci 命令行在执行的时候会从 /lib/liblzma.so.5 elf 文件的信息,后面也没有看到其它与问题相关的操作,那么很明显应该是从这个 elf 文件中获取到的信息不对,或者说压根就获取不到任何信息。
nm 查看 liblzma.so.5 的符号信息,得到了如下输出:
nm /lib/liblzma.so.5
nm: /lib/liblzma.so.5: no symbols
这个输出让我觉得可能是这个库被 strip 掉了而缺少符号信息,于是找了个正常系统中的库,结果发现正常的系统中 liblzma.so.5 也没有符号,那看来应该不是这个问题。
搜索互联网
从晚上找到了如下链接:
What does the “no version information available” error from linux dynamic linker mean?
看这个链接里面的描述,我这里遇到的问题可能是库的版本不对,于是直接使用正常运行的环境中的库替换出问题环境中的库,替换之后问题得到了解决。
为什么更新了我们的组件引入了这个问题?
已经解决了这个问题后,还需要想想为什么更新了我们提供的组件后就引入了这个问题,查看组件的内容,发现它会更新系统中的 liblzma.so.5 文件,这就造成了问题。
上一篇: c++链接错误解决办法
下一篇: 2018前端面试题(二)