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)
不是同一个版本
所以,我的问题是为什么 @@zlib
的 nm
输出是 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 版的符号,而您拥有的库提供了这些符号。
我刚刚构建了一个共享库,但是当我使用 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)
所以,我的问题是为什么 @@zlib
的 nm
输出是 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 版的符号,而您拥有的库提供了这些符号。