这是一个更普遍的问题。我知道 Windows DLL 可以使用 dll 版本信息设置资源文件,但我想知道如何为 linux 共享对象做同样的事情。
我遇到的问题实际上是在终端上运行几乎任何东西时,我收到一条关于 libz.so.1 版本信息不可用的消息。这是由于我编译的应用程序具有自己的 libz 版本。该库实际上是 libz.so.1.2.3,并且 /lib 中存在相同的版本。这些文件实际上是库的相同版本,但其中一个(我编译的)说它缺少版本信息。
所以,这让我想知道如何在二进制文件中实际包含版本信息,而不仅仅是在文件名中。如果有像这样的解决方案,那将是理想的
./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)