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

时间:2016-07-24 02:06:16

标签: c++ gcc

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

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

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

第二种方法是使用-m32使用所有32位库和32位编译器g ++ 3.4.6在64位上编译应用程序。编译好了。但是我使用boost多线程库来获得分段错误。需要进一步调查原因。

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

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

1 个答案:

答案 0 :(得分:2)

  

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

您错过了非常明显的一个:端口并将您的应用程序构建为本机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库的需求持续下降;随着时间的推移,它们的使用越来越少;而且他们越来越少,支持越来越少;并且没有人真的想浪费更多时间进行测试并确保它们仍然可以正常工作。