将应用程序从Solaris移植到Linux

时间:2008-12-17 11:23:17

标签: c++ linux solaris porting

我将承担从Solaris到Linux平台移植相当大的C ++网络应用程序代码库的任务。该代码还使用ACE等第三方库。最初编写的应用程序未计划在将来进行移植。

我想就如何完成任务获得一些建议和意见。什么是最好的方法。

-Prabhu。 S

4 个答案:

答案 0 :(得分:7)

ACE是一个优势,因为它是多平台的。您必须检查您的类型大小的使用位置和方式。如果使用ACE_ *基本类型,那么你可以在那里使用条纹,因为它们是可移植的,否则我会首先将Solaris版本更改为使用多平台数据类型和元素(使用ACE工具,因为你已经有了它)。

如果您使用的是任何仅有Solaris的外部库,则必须在linux中找到一个等效项并编写一个包装器,以便应用程序的其余部分不需要知道正在使用的实现。

之后,只需一个代码库就可以直接迁移到linux。你应该完全编译和测试它。

答案 1 :(得分:6)

“只有便携式应用程序才能使用已移植的应用程序”

首先,如果可以的话,首先在两个平台上使用相同的工具。 I.E.如果Solaris版本尚未更改为使用GCC和GNU make等,我建议您先更改此版本并使Solaris版本正常工作。您将发现首先修复编译器问题,而不是尝试在尝试移植应用程序的同时在Linux上修复它们。

第二,确保您可以在同一版本的每个平台上获得所有相同的库。我想你可以获得Linux for ACE。确保该版本的库在Solaris上运行。这将限制兼容性问题。

完成后,真正的工作就开始了。

您需要一次编译一个源文件,并找到Linux中不可用的功能。首先寻找两种操作系统都可用的替代品。如果没有简单的替换,那么为Solaris创建一个库,为Linux创建一个库。创建包装类或函数来抽象不兼容性。

如果这听起来像是很多工作 - 那就是。

答案 2 :(得分:2)

我同意David Allan Finch所写的内容。一次一个接一个端口。另外:

您是来自Solaris / SPARC还是Solaris x86?如果它是x86,你将没有端序问题,但如果它是SPARC,你需要检查你的代码以确保没有字节顺序(endian)问题。

Solaris代码是32位还是64位?当然最初保持地址空间相同。

答案 3 :(得分:1)

列出您当前的外部依赖项。在Linux上查找可用的内容。对于那些不是,你必须找到替代品。如果对那些外部依赖项的引用没有被抽象出函数或对象,那么重构代码就是这样。然后替换依赖项,这样就可以用替换函数实现抽象函数。