【发布时间】:2010-09-27 07:39:09
【问题描述】:
我将承担将相当大的 C++ 网络应用程序代码库从 Solaris 移植到 Linux 平台的任务。该代码还使用 ACE 等第三方库。最初编写的应用程序没有计划将来可能的移植。
我想就我如何完成这项任务获得一些建议和建议。最好的方法是什么。
-帕布。
【问题讨论】:
我将承担将相当大的 C++ 网络应用程序代码库从 Solaris 移植到 Linux 平台的任务。该代码还使用 ACE 等第三方库。最初编写的应用程序没有计划将来可能的移植。
我想就我如何完成这项任务获得一些建议和建议。最好的方法是什么。
-帕布。
【问题讨论】:
ACE 是一个优势,因为它是多平台的。您必须检查字体大小的使用位置和方式。如果使用了 ACE_* 基本类型,那么您就会遇到连胜,因为它们是可移植的,否则我将首先将 Solaris 版本更改为使用多平台数据类型和元素(使用 ACE 工具,因为您已经有了它)。
如果您使用任何仅 Solaris 的外部库,则必须在 linux 中找到一个等效的库并编写一个包装器,这样应用程序的其余部分就不需要知道正在使用什么实现。
之后,只需一个代码库就可以直接迁移到 linux。您应该完全编译和测试它。
【讨论】:
“没有可移植的应用,只有被移植的应用”
如果可以的话,首先在两个平台上使用相同的工具。 IE。如果 Solaris 版本尚未更改为使用 GCC 和 GNU make 等,我建议您先更改此版本并让 Solaris 构建工作。你会发现你会先修复编译器问题,而不是在尝试移植应用程序的同时尝试在 Linux 上修复它们。
其次,确保您可以在每个平台上以相同的版本获取所有相同的库。我认为您可以获得适用于 Linux 的 ACE。确保该版本的库可以在 Solaris 上运行。这将限制兼容性问题。
一旦你完成了,那么真正的工作就开始了。
您将需要一次编译每个源文件并找到 Linux 中不可用的功能。首先寻找在两个操作系统中都可用的替代品。如果没有简单的替换,则创建两个库,一个用于 Solaris,一个用于 Linux。创建包装类或函数以抽象出不兼容性。
如果这听起来像很多工作 - 确实如此。
【讨论】:
我同意 David Allan Finch 所写的内容。一步一步走上港口。另外:
您来自 Solaris/SPARC 还是 Solaris x86?如果是 x86,则不会有字节序问题,但如果是 SPARC,则需要检查代码以确保不存在字节顺序(字节序)问题。
Solaris 代码是 32 位还是 64 位?最初当然要保持地址空间相同。
【讨论】:
列出您当前的外部依赖项。找出在 Linux 上可用的这些。对于那些不是,你必须找到一个替代品。如果对这些外部依赖项的引用没有在函数或对象后面抽象出来,请重构代码,使其如此。然后替换依赖,这样就可以用替换实现抽象函数了。
【讨论】: