将应用程序X移植到平台Y是什么意思?

时间:2010-03-30 18:06:38

标签: language-agnostic portability

从标题本身可以清楚地看出,将应用程序X移植到平台Y是什么意思?

比如说我在某个操作系统上运行了一个应用程序X,比如说Y,我怎么做才能将这个应用程序移植到另一个操作系统说Z? 这是否意味着重写操作系统Z的新应用程序A,它必须模仿操作系统Y上应用程序X的行为。

请解释。

3 个答案:

答案 0 :(得分:3)

没有一种精确的方法可以做到这一点。在某些情况下,需要完全重写。在其他情况下,可能需要编译不同的OS或处理器。它实际上取决于应用程序,源平台和目标平台。无论什么都有效!

答案 1 :(得分:1)

某些程序,您可能只能重新编译一个新平台,没有问题。如果它是一个非常简单的程序,不使用特定于该操作系统的任何东西,您可能能够逃脱这一点。基本上,获取源代码,将其移动到另一个操作系统,并在那里使用编译器。但是,即使存在特定的代码,也可以在代码中使用编译时标志或常量来使编译器以不同的方式运行。我的C ++语法生锈了,但我认为这应该表明我的意思:

#if OS == WINDOWS
root = "C:\\";
#elseif OS == LINUX
root = "/";
#endif

另一种方法是在虚拟机内运行程序,如Java。该VM可以在不同的平台上运行,并且您的可执行文件应该能够在使用它的任何地方无缝运行。如果有特定于操作系统的代码,您可能需要进行一些小的更改重新编译,但是如果您打算从开始到端口,那么您可能不会担心这一点。

第三种方式是两者的结合,如果我没记错的话,是Firefox的作​​用。大多数代码保持完全相同,但它使用一个基础来运行,这是专门为该操作系统编译的,它定义了不同的东西,创建了特定类型的变量,例如nsInt(因为我已经有一段时间了)我看了FF代码,所以我可能错了,但我知道前置ns是他们的惯例),你将使用它来代替int,因为它的具体设计是相同的平台。

编译时,为基础选择了正确的平台,然后使用该平台编译整个程序。

答案 2 :(得分:1)

我同意彼得。

“移植”,当用非技术类型表示时,通常表示:“我想在我的系统上使用X - 我该怎么做?”这可能就像复制相同的代码(比如Java或.Net)和运行它(ta da!)一样简单,或者它可能像将X作为规范的基础并从头开始重建一样复杂(每个彼得完全重写。

技术用户的“移植”通常是指将一个功能从一个系统移动到另一个系统。它可以是操作系统(OS),框架(例如Java到.Net),技术(例如Flash到JavaScript + CSS + xHTML)......

无论哪种方式,您都需要更多信息来提供推荐/解决方案。