为什么LD一直输出“无可用版本信息”

为什么LD一直输出“无可用版本信息”

每次加载库时,我都会收到错误:

没有可用的版本信息

该库已在另一台 PC(ubuntu 10.04)上编译,而不是在运行它的 PC(mandriva 2010.2)上编译。

$ ldd /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so
/usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so: /lib/libz.so.1: no version information available (required by /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so)
 linux-gate.so.1 =>  (0xffffe000)
 libz.so.1 => /lib/libz.so.1 (0xb77a7000)
 libc.so.6 => /lib/i686/libc.so.6 (0xb7655000)
 /lib/ld-linux.so.2 (0xb787a000)

编辑:解决方法不起作用。

答案1

不,事实并非如此。这似乎意味着您在编译程序时链接的 libz 版本是使用与您正在使用的 madriva 系统上的版本不同的工具构建的。 mandriva 副本缺少符号版本信息,该信息存在于程序最初链接的 libz 库的副本中。这与各自构建环境的差异有关,而不是与 libz 库本身的版本有关。

我怀疑您会继续收到该消息,直到您提供使用与二进制文件相同的工具集(即将符号版本插入到库中的工具集)构建的 libz 副本。或者使用与在 mandriva 系统上编译 libz 时使用的工具类似的工具构建二进制文件,因此二进制文件中不存在符号版本引用。

看: http://harmful.cat-v.org/software/dynamic-linking/versioned-symbols http://www.linux-kongress.org/1997/youngdale.html http://www.usenix.org/publications/library/proceedings/als00/2000papers/papers/full_papers/browndavid/browndavid_html/

我不知道有什么工具可以让您修改在其他系统上编译的二进制文件以删除您不需要的符号版本引用,并保留所有其他版本引用(如果有)。

答案2

该错误“没有可用的版本信息”意味着您在编译库时链接的 libz 版本比您正在使用的 mandrivia 系统上的版本新。

相关内容