nm输出显示共享库的版本不正确

时间:2016-01-26 16:18:33

标签: linux gcc shared-libraries nm

我刚刚构建了一个共享库,但是当我使用nm命令查看依赖项时,输出如下所示

$ nm -a libgio-2.0.so.0.2701.0 | grep ZLIB
     U deflateSetHeader@@ZLIB_1.2.2
     U inflateGetHeader@@ZLIB_1.2.2

我不知道@@ZLIB_1.2.2的意思,实际上建立libgio的命令是

gcc -o libgio-2.0.so.0.2701.0   libfoo.so libbar.so libz.so.1.2.8

其中libz.so.1.2.8由我自己构建并放到libgio-2.0.so.0.2701.0的同一目录中。它与系统的libz(/usr/lib/libz.so)版本不同

所以,我的问题是为什么nm的{​​{1}}输出是@@zlib,而不是1.2.2?以及1.2.8在nm输出中的平均值是什么?

由于

1 个答案:

答案 0 :(得分:0)

nm正在显示版本化符号且版本没有错误。

  

所以,我的问题是为什么@@ zlib的nm输出是1.2.2而不是1.2.8?

因为这是您链接到的库中符号的版本。符号的版本不必与库的版本相同。

  

和@@ ZLIB_1.2.2在nm输出中的平均值是什么?

这意味着版本1.2.2中添加了deflateSetHeader符号的当前定义

在版本1.2.8中仍然相同,因为这些版本的zlib库是兼容的。版本1.2.8提供与版本1.2.2相同的符号,它们是兼容的。新库也可能提供一些额外的符号,这些符号的版本为ZLIB_1.2.2,但您的库不使用它们,因此您在nm输出中看不到对它们的任何引用。

基本上一切都还可以,没什么值得担心的。您的程序需要1.2.2版本中的符号,并且您提供的库提供了这些符号。