在opensuse Linux 11.4中,符号errno,版本GLIBC_2.0未定义

时间:2014-03-07 04:19:53

标签: linux glibc opensuse

我有一个第三方32位可执行文件,我需要在OpenSuSE Linux 11.4上运行。 当我运行它时,我收到此错误:

filename:重定位错误:文件名:符号errno,版本GLIBC_2.0未在文件libc.so.6中定义,带有链接时间参考。

在/ lib目录中,libc.so.6作为符号链接,指向libc-2.11.3.so。当我对此进行objdump和grep for errno时,我得到了这个:

00000008 g D  .tbss 00000004 GLIBC_PRIVATE  errno
000171c0 g DF .text 0000001d GLIBC_2.0      __errno_location
000f96e0 g DF .text 0000007d GLIBC_2.0      clnt_sperrno
000f98a0 g DF .text 0000003d GLIBC_2.0      clnt_perrno
00000034 g D  .tbss 00000004 GLIBC_PRIVATE  h_errno
000ec860 g DF .text 0000001d GLIBC_2.0      __h_errno_location

我没有可执行文件的源代码。有没有办法我可以自己添加补丁到glibc的源代码并在我的机器上本地修复这个问题?

如果可以,那么补丁是什么?

可执行文件是lmgrd的第三方版本,即启动其许可证服务器的实用程序。

可执行文件的ldd输出如下所示:

linux-gate.so.1 =>  (0xffffe000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf76a5000)
libc.so.6 => /lib/libc.so.6 (0xf753c000)
/lib/ld-linux.so.2 (0xf76f6000)

提前致谢。

1 个答案:

答案 0 :(得分:5)

  

relocation error: filename: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference.

     

可执行文件是lmgrd的第三方版本,即启动其许可证服务器的实用程序。

该可执行文件必须已在古老的机器上链接。这是问题的一个很好的explanation

  

有没有办法可以自己添加补丁到glibc的源代码并在我的机器上本地解决这个问题?

是的,但是你真的不应该这样做(它是(a)复杂的,(b)如果搞砸了你的glibc,你可以很容易地使你的系统无法启动。)

与第三方供应商联系,告诉他们由于lmgrd损坏,您无法使用他们的产品。请你退钱。你可能会对他们试图解决这个问题的动机感到惊讶。