【问题标题】:How to compile app to work on several Glibc versions如何编译应用程序以在多个 Glibc 版本上工作
【发布时间】:2013-01-28 19:02:04
【问题描述】:

如何编译应用程序以在所有 2.X Glibc 版本上工作?现在我在 2.7 GLibc 版本的机器上编译,但是当我启动 glibc 版本为 2.5 的应用程序时,我有一个错误:

./server: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by ./server)

如何编译适用于所有 2.X 版本的应用程序?

编译命令:

g++  -o newserver  test.cpp ... -lboost_system -lboost_thread -std=c++0x

谢谢!

【问题讨论】:

    标签: c++ glibc dynamic-linking


    【解决方案1】:

    最简单的方法是在您要支持的机器中使用最古老的 glibc 进行构建。对于 linux 机器,您甚至可以进行完整安装并将其转移到您机器上的 chrooted 环境中:这样,您就无需降级您的工作场所。

    我很高兴在其他答案中看到更方便的解决方案(如果确实更方便:任何涉及 GCC 重建的东西都不符合条件,恕我直言)。

    【讨论】:

    • 那么,例如,如果我使用 glibc 2.2 编译应用程序,它也适用于 2.7 吗?如果是,请您帮帮我,我该怎么做?
    • 是的,如果您为 glibc 2.2 编译,它将适用于 2.7。最简单的方法是安装具有 glibc 2.2 的 system。是否安装到 chrooted 环境、虚拟机或物理机由您决定——选择您想要的。
    • @Breakdown,是的,完全正确。最简单的方法是在 VM 中安装旧版本的 GNU/Linux。 (手动将 glibc 安装到 chroot 或其他地方很难。将完整的发行版安装到 VM 中非常容易)
    【解决方案2】:

    我不是专家,但我突然想到,如果应用程序需要在 glibc 2.5 上运行,那么它必须将自己限制在 2.5 中可用的功能上,之后就没有了。换句话说,限制使用 2.6 或更高版本中引入的功能。这会有帮助吗?

    如果您真的需要 glibc 2.7 的功能,那么将其作为目标系统的明确要求。您可以输入一些代码来检查它运行的系统的 glibc 版本,如果可用版本低于所需版本,则打印/记录一条综合消息并优雅退出。

    但是,如果您想扩展您的网络,即计划在广泛的系统上运行您的应用程序,那么使用较低版本(如第 1 段所述)可能会更有成效。

    【讨论】:

    • 一般情况下不会。事情以某种方式得到修复或改变,突然间你的旧有名符号是GLIBC_2.7
    猜你喜欢
    • 2017-06-04
    • 2014-11-16
    • 2023-04-01
    • 1970-01-01
    • 2012-03-29
    • 2019-09-12
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多