我占用移植一个C ++从联网的Solaris相当大小到Linux平台的应用程序代码的任务。该代码还使用第三方库像ACE。没有计划在未来可能的移植最初写入时的应用。

我想获得一些意见和建议,我怎么去的任务。什么是遵循的最佳方法。

-Prabhu。小号

有帮助吗?

解决方案

<强>“没有这样的东西作为一个便携式应用仅已被移植的应用程序”

先用,用在两个平台上相同的工具,如果你可以开始了。 I.E.如果Solaris版本还没有被更改为使用GCC和GNU make等等,我劝你改变这个第一,并获得了Solaris的构建工作。你会发现,你将解决问题的编译器第一次,而不是试图在同一时间来解决他们在Linux上的努力端口的应用程序。

其次确保您可以在同一版本获得每个平台上都相同的库。我认为你可以得到ACE的Linux版本。确保在Solaris上的那个版本工作的库。这将限制兼容性问题。

一旦你已经做了那么真正的工作开始。

您将需要编译每个源文件一次一个,发现都不能在Linux中的功能。首先寻找一个替代品,在这两个操作系统可用。如果没有简单的替换再创建两个库一个用于Solaris,一个用于Linux。创建包装类或功能抽象不兼容性程。

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

其他提示

ACE是一个加在那里,因为它是多平台。您必须检查在何处以及如何你的类型的大小被使用。如果ACE_ *基本类型用于你打条纹出现,因为这些是便携式的,否则我会被改变的Solaris版本将使用多平台的数据类型和元素开始(使用ACE设施,因为你已经到位)。

如果您正在使用的任何仅限Solaris外部库,你将不得不找到在Linux同等写的包装,使应用程序的其他部分并不需要知道正在使用什么样的实现。

在此之后,迁移进入linux应该是直的只用一个码基部向前。你应该编译通过,完全测试。

我在什么大卫·芬奇艾伦写道协议。采取在一次端口一步。此外:

您通过Solaris / SPARC或Solaris x86的来吗?如果是86,你有没有尾数的问题,但如果它是SPARC,你需要检查你的代码,以确保不存在任何字节顺序(endian)的问题。

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

您当前的外部依赖是

列出什么。找到这些东西都可以在Linux上。对于那些不,你必须找到一个替代品。如果这些外部依赖关系中的引用不会抽离背后的功能或对象,重构代码,所以它是如此。然后更换依赖关系,这样就可以实现与更换抽象功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top