gpt4 book ai didi

c++ - 为多个版本的 RedHat 构建应用程序

转载 作者:行者123 更新时间:2023-11-28 01:36:25 25 4
gpt4 key购买 nike

假设在我的公司,我们有相同的用 C++ 编写的应用程序,运行在 RHEL5、6 和 7 的机器上。

我想从一个单一的构建服务器(运行 RHEL7)进行构建,以获得在 RHEL 的旧版本中运行的可执行文件。我可以知道它是否可以实现吗?

我希望如果我在 RHEL7 中构建,并且相应版本的 gcc 和 glibc(以及其他库)在 RHEL5 中可用,生成的可执行文件应该在 RHEL5 中运行。我的理解正确吗?还是有更多需要注意的地方?

最佳答案

I expect if I am building in RHEL7, with corresponding version of gcc and glibc (and other libs) available in RHEL5, the resulting executable should run in RHEL5.

理论上,是的。实际上,在您的 RHEL7 系统上安装多个版本的 glibc 和其他库可能是一个失败的原因 - 特别是 RHEL5 所需的非常古老的库,尤其是 glibc,它期望对系统有很多了解。

反过来可能更容易 - 在 RHEL5 上构建所有内容,静态链接所有你可以但 glibc(静态链接到 glibc 基本上是不可能的)并希望前向二进制兼容性保持足够好。这是通常采用的方法(“构建在您想要支持的最古老的 Linux 发行版上”),但我怀疑 glibc 的前向二进制兼容性是否可行,因为与 RHEL7 相比,RHEL5 非常古老.

回到最初的计划,在 RHEL7 机器内的容器中安装 RHEL5 和 6 并构建这些版本可能更容易。毕竟,这有点像在 RHEL7 机器上安装它们的 gcc 和库版本,但是在 非常 中 sysroots 分离得很好 - 但没有拥有不同构建机器的开销(它们都是相同内核的客户端) ).

最后,极端的方法是使用替代的 libc(仅依赖于内核,选择您想要支持的最旧的)并静态编译所有内容。这可以做到,例如使用 musl,但你必须编译你的编译器、你的 libc 和所有你的依赖项。尽管如此,好的结果是您将能够构建完全独立的可执行文件,能够在您确定的最低要求之后的几乎任何内核上运行。

关于c++ - 为多个版本的 RedHat 构建应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com