【问题标题】:C++ Migration of application written in RHEL4 32bit to RHEL6 64bit使用 RHEL4 32 位编写的应用程序的 C++ 迁移到 RHEL6 64 位
【发布时间】:2026-01-18 18:55:01
【问题描述】:

我对此有一系列问题,并希望保持简单、概念性和可以实际尝试的东西。

我的 C++ 应用程序有许多库,其中一些是 2007 年以来的第三方库,例如 boost、antlr、libxml2 等。我为它们提供了 32 位库,它们使用 -m32 标志编译。

方法问题 理想情况下,我希望能够通过在 64 位 RHEL6 操作系统上从 32 位复制来运行应用程序,但我发现它因分段错误而崩溃。需要对此进行单独分析,我尚未完成。

第二种方法是使用 -m32 使用所有 32 位库和 32 位编译器 g++ 3.4.6 在 64 位上编译应用程序。这编译好了。但是我遇到了 boost 多线程库的分段错误。需要对原因进行更多调查。

第三种方法非常困难,因为我需要找到一些旧库的源代码也将在 64 位上重新编译为 64 位应用程序。

还有其他我可以采用的方法吗?我的方法中是否遗漏了什么?

【问题讨论】:

  • 把它扔进垃圾箱......我在开玩笑......说真的,我希望你能得到答案
  • 当然。这项工作是非技术性的,所以我认为不需要你和我:)
  • 简单,在 64 位主机的 32 位 docker 容器中运行它。
  • 您可以分享任何链接,其中包含更多详细信息?并且复制二进制文件和 .so 是否可以使其运行?虽然它可以解决它的运行时间,但它不会解决它的维护紧急更改。问题是我需要停用 32 位和 RHEL4。在 RHEL4 之后,我们在任何其他 Linux 平台上都没有 32 位。
  • 安装 docker - docs.docker.com/engine/installation/linux。如果您只想复制二进制文件 .so,则需要确切版本的 docker 映像,这将很难找到。可能你需要用github.com/docker/docker/blob/master/contrib/mkimage-yum.sh 构建类似的东西

标签: c++ gcc


【解决方案1】:

还有其他我可以采取的方法吗?我也错过了 我的方法有什么?

您错过了一个非常明显的问题:将您的应用程序移植并构建为原生 64 位应用程序。

您当然可以在向本机 64 位架构的过渡中发现问题。但重要的是要了解这些问题将是您代码中的真正错误,到目前为止,这些问题在原始 32 位平台上一直被隐藏或未被检测到。这将是找到并修复它们的绝佳机会。

去过那里,做到了。

迁移过程完成后,您将获得一个原生 64 位应用程序,这是获得长期支持的最佳情况。碰巧的是,本周的新闻是来自流行的 Linux 发行版about discontinuing 32 bit support altogether 的公告。 32位即将推出。在某些时候,您将不再有运行 32 位应用程序的选项(因为没有本机 32 位 Linux 发行版,就没有任何理由构建 multilib 64/32 版本)。最好做好准备,在有时间有序迁移到 64 位的时候投入时间,然后弄清楚你脚下的地毯已经被拉出来,你的下一个 Linux 平台将只有 64 位,并且您的关键任务应用程序尚未准备好 64 位。

得知您在使用 multilib 兼容性库时遇到的问题是由于 multilib 构建本身的问题和错误引起的,我也不会感到惊讶。对 multilib 库的需求不断下降;随着时间的推移,它们的使用越来越少;他们得到的支持越来越少;并且没有人真的想再浪费时间进行测试并确保它们仍然有效。

【讨论】:

    最近更新 更多