【问题标题】:linux error with libc.so.6libc.so.6 的 linux 错误
【发布时间】:2012-09-28 00:37:57
【问题描述】:

我在我的 ubuntu 12.04 机器上编译了一个 c++ 程序,并试图在 red hat linux 服务器上运行它。当我在服务器上运行它时,我得到了这个错误:

/lib64/libc.so.6:未找到版本“GLIBC_2.14”

我找到了 libc.so.6 文件,发现它链接到同一目录中的 libc-2_12.so。我假设我需要将 libc-2_12.so 文件替换为 libc-2_14.so 之类的文件。但是通过搜索,我发现没有办法做到这一点,或者甚至有可能。有没有办法解决这个问题?

【问题讨论】:

  • 确认一下:你的redhat linux服务器是32位的吧?如果它是 64 位的,到 LDLIBRARY 的路径与 ubuntu 不同?
  • 两台机器都是64位
  • 两台机器上的编译器版本和硬件架构是否相同?
  • RedHat 是为“稳定”而设计的,这意味着每个版本基本上只提供安全修复。这意味着大多数软件包都不是最新的,就像具有滚动发行版或至少更频繁发行版(如 Ubuntu)的发行版。

标签: c++ linux


【解决方案1】:

IMO,最好的方法是为 RedHat 重新编译您的程序。 在 RH 中,替换该文件的唯一方法是重新编译整个 libc,但它会破坏使用 RH 安装的所有其他软件。 RH 的打包系统不允许你在不同版本的 libc 之间切换。

【讨论】:

  • 好的,我害怕,我会尝试在服务器上构建它。谢谢你的解释。
【解决方案2】:

如果您的 red hat 集群中某处有正确的库(否则得到一个有效的库),只需将其路径添加到 LD_LIBRARY_PATH 环境变量的前面(LD_RUN_PATH 也可以这样做)。

【讨论】:

    【解决方案3】:

    正如其他答案所说,最好的方法是在服务器上重新编译您的程序。另一种方法是静态链接您的程序,通过在链接时将-static 传递给 GCC(或者,如果您只是使用单个命令进行编译,则在编译程序时)。

    这应该会引入所有依赖项并创建一个单独的(尽管非常大)程序,而不是在运行时使用动态链接器。虽然有各种各样的行为都可能出错,所以你最终可能会出现奇怪的行为,或者根本没有用处。 谨慎使用

    当然,这只有在两台机器的架构相同时才有效。

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 2023-01-17
      • 2012-08-29
      • 1970-01-01
      • 2022-08-11
      • 2020-11-06
      • 2020-03-25
      • 2013-11-10
      • 2013-08-29
      相关资源
      最近更新 更多