【问题标题】:Linux environment to build 32 and 64-bit application (C++)用于构建 32 位和 64 位应用程序的 Linux 环境 (C++)
【发布时间】:2013-07-12 19:26:59
【问题描述】:

我正在寻找有关如何为需要为 32 位和 64 位架构编译的 Linux 应用程序设置构建机器的建议。

据我所知,我需要一个 64 位操作系统,它可以构建 32 和 64。添加 -m32 标志将为 32 生成正确的输出,这里没有挑战。

主要问题在于库。我不确定如何继续... 如何确保链接器使用 32 位版本的简单库,例如 ldl、lz、lrt?我知道我必须安装所有的32位版本,然后配置链接器路径。

另一个问题是编译器、链接器、libc 等的版本。我应该使用最旧的版本,以确保所有客户端都能正常运行吗?我的意思是,如果我在最新的 Debian 中构建应用程序,在旧的 Debian 中它将无法正常工作,对吗?

感谢您的帮助!

【问题讨论】:

  • 只拥有不同架构的虚拟机可能会更容易,这样就不会有混乱。或者,我认为您也可以在 64 位 Linux 中拥有一个 32 位 chroot,并从 chroot 中构建您的 32 位版本。不过我不确定。
  • 谢谢!我正在考虑设置多个虚拟机的替代方案。

标签: c++ linux build


【解决方案1】:

大多数具有 64 位构建的 Linux 版本也可以构建 32 位构建,并且几乎所有库都可用于两者,因此您需要做的就是与 64- 并行安装相关的 32 位库位的。在大多数情况下,路径的配置与纯 64 位或 32 位构建没有什么不同。可能有一些图书馆有问题,但你真的需要去寻找那些。所有主流数据包都将同时安装与 32 位和 64 位库版本一起使用的库。

当涉及到“哪个 libc”等时,这是一个更困难的问题,因为这实际上取决于您的客户在他们的机器上拥有什么——而且您不太可能规定他们应该使用 Debian, RedHat 或 SuSE - 他们会非常强烈地使用他们正在使用的任何东西。使用“太旧”的库与使用“太新”的库一样糟糕。通常的解决方案是构建多个版本,一个用于选定的 RedHat 版本(通常应该与新/旧版本以及同一范围内的 Fedora 版本一起工作几步),一个 Debian 版本,以及SuSE 版本,可能还有一两个发行版。

是的,那时,您可能想要设置一个带有几个虚拟机的构建机器,这样您就不必拥有 3、5 或 12 台物理机。

【讨论】:

  • 感谢您的支持,真的很有帮助!
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 2011-10-08
  • 2021-12-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多