0

我在我的 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 之类的文件。但是通过搜索,我发现没有办法做到这一点,或者甚至有可能。有没有办法解决这个问题?

4

3 回答 3

0

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

于 2012-09-27T16:31:10.030 回答
0

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

于 2012-09-27T16:28:10.723 回答
0

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

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

当然,这只有在两台机器具有相同架构的情况下才有效。

于 2012-09-27T16:37:57.390 回答