我刚刚构建了一个共享库,但是当我使用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输出中的平均值是什么?
由于
答案 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版本中的符号,并且您提供的库提供了这些符号。