【问题标题】:symbol errno, version GLIBC_2.0 not defined, in opensuse Linux 11.4符号 errno,版本 GLIBC_2.0 未定义,在 opensuse Linux 11.4 中
【发布时间】:2014-03-08 13:55:48
【问题描述】:

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

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

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

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,该实用程序启动其许可证服务器。

Executable 的 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)

提前致谢。

【问题讨论】:

  • ldd <binary> 输出什么?
  • 感谢您的回复,Subhasis。我已经添加了 ldd 输出。

标签: linux glibc opensuse


【解决方案1】:

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,你很容易使系统无法启动)。

联系第 3 方供应商并告诉他们,由于 lmgrd 损坏,您无法使用他们的产品。要求退钱。您可能会惊讶于他们尝试解决这个问题的积极性。

【讨论】:

  • 非常感谢,受雇于俄罗斯人。你写的一切都是对的,你的最后一条建议是我必须向我的老板展示的东西.. :-)
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多