C++ 将 RHEL4 32 位编写的应用程序迁移到 RHEL6 64 位

标签 c++ gcc

我对此有一系列问题,并且希望让事情变得简单、概念化并且可以实际尝试。

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

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

第二种方法是使用 -m32 使用所有 32 位库和 32 位编译器 g++ 3.4.6 在 64 位上编译应用程序。这样编译就ok了。但我在升压多线程库中遇到段错误。需要更多调查来了解原因。

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

我还可以采取其他方法吗?我的方法中是否遗漏了一些内容?

最佳答案

Are there any other approaches that I can take and also did I miss something in my approach?

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

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

去过那里,做过那件事。

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

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

关于C++ 将 RHEL4 32 位编写的应用程序迁移到 RHEL6 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38548094/

相关文章:

c++ - 如何使用 QRegExp 解析 pacmd 列表输出并查找接收器索引和名称?

c++ - 如何将 Boost::shared_ptr<T> 暴露给 Tcl + SWIG 接口(interface)文件?

c++ - 为什么二进制搜索函数会抛出错误?

linux - 无法使用 Cygwin 访问 sys/socket.h

c++ - 字节数组置换 SSE 优化

c++ - 为什么整数上的 std::hex 和 void* 会产生相同的值

c++ - 使用eclipse 编辑C++ 代码。如何在不编辑所有代码的情况下自动包含默认头文件

c - 结构元素值在执行期间被覆盖

ios - libc++abi.dylib : handler threw exception -- but no stack trace in XCode

c++ - 如何让 gcc 或 ld 报告 undefined symbol 但不失败?