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

nm output of show the shared library's version is incorrect

我刚刚构建了一个共享库,但是当我使用 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)

不是同一个版本

所以,我的问题是为什么 @@zlibnm 输出是 1.2.2,而不是 1.2.8? nm 输出中 @@ZLIB_1.2.2 的意思是什么?

谢谢

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

So, my question is why the nm output of @@zlib is 1.2.2, not 1.2.8?

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

and what the mean of @@ZLIB_1.2.2 in nm output?

表示当前deflateSetHeader符号的定义是在1.2.2

版本中加入的

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

基本上一切正常,没有什么可担心的。您的程序需要 1.2.2 版的符号,而您拥有的库提供了这些符号。