这是一个更普遍的问题。我知道windows DLL可以使用dll版本信息设置资源文件,但我想知道如何为linux共享对象做同样的事情。
我遇到的问题实际上是在终端上运行任何东西时,我收到一条关于libz.so.1版本信息不可用的消息。这是因为应用程序存在我自己编译的libz版本。该库实际上是libz.so.1.2.3,并且/ lib中存在相同的版本。这些文件实际上是库的SAME版本,但其中一个(我编译过)说它缺少版本信息。
因此,这让我想知道如何在二进制文件中实际包含版本信息,而不仅仅是文件名。如果有像
这样的解决方案,那将是理想的选择./configure .... some_version_option=1.2.3
如果我使用该库的工作版本:
ldd /usr/bin/git
linux-vdso.so.1 => (0x00007fffdfbff000)
libz.so.1 => /lib64/libz.so.1 (0x00007f3797fa7000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c56000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c55c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c55400000)
如果我使用我编译的版本:
ldd /usr/bin/git
/usr/bin/git: libz.so.1: no version information available (required by /usr/bin/git)
linux-vdso.so.1 => (0x00007fff872b1000)
libz.so.1 (0x00007f83c9270000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c56000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c55c00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c55400000)
答案 0 :(得分:0)
您需要使用-Wl,--version-script <file.map>
传递库的符号版本映射文件。地图文件应包含在库源中。