跨平台开发

8
我对真正的跨平台开发有疑问,是否可能使用一个平台来开发软件。 我编写了几个应用程序,可以在OS X、Windows和Linux上运行。它们都使用本地平台工具包,其中一些源在不同平台之间共享。我必须启动每个平台,在每个平台上进行检查、编译等操作。 我过去尝试过GUI工具包,如QT(我购买了Win、mac、Linus的商业许可证,但非常昂贵,年复一年的付款变得困难)。我尝试过WxWidgets,但开发进展缓慢。 因此,我的想法是是否有办法在一个平台上运行,并且可以交叉编译到其他平台,这样我就可以从一个平台构建我的产品。 我倾向于使用OS X,是否有办法从OS X编写适用于OS X、Windows、Linux的应用程序,只需在各个平台上测试即可。我找到了关于交叉编译器、存根编译等信息。 是否有人有什么想法?这实际上可行吗?是否有人会为创建这样的神兽而赚取巨额利润?

1
我建议在这个问题上使用社区维基。 - Wayne Koorts
请参阅:http://stackoverflow.com/questions/463431/what-are-some-good-tools-and-strategies-for-multi-platform-development - dreftymac
9个回答

8
在我的公司,我们使用Mozilla Framework开发跨平台的词典产品。这些应用程序基于Gecko/Necko浏览器,大多数开发是通过Javascript、HTML、CSS、XSL、XUL等完成的。当然,我们自己编写的搜索引擎必须被交叉编译到三个平台上(还有一些其他的代码,最初是用JS编写的,然后为了速度原因移植到moz的C++中)。
最终,我们拥有了一个相对跨平台的解决方案:我们的开发人员大多像强大的Web开发人员一样工作(同时考虑客户端和服务器端)。因为Gecko在三个平台上都是相同的,所以我们知道它看起来和行为方式是可预测的(除非有错误,但是从这个角度来看,该平台现在已经非常成熟)。
我们的研发部门知道如何将缓慢的Javascript代码移植到相当快速的可移植C++代码中(使用NSPR库编写Mozilla代码,这是一个跨平台库)。但是测试始终必须在三个平台上进行,尽管随着时间和经验的积累,您会知道哪里会出问题(字体支持、音频支持、Flash支持)...
今天,您可能需要查看XULRunner,它实际上是没有任何真正浏览器界面的Mozilla(在2002年,我们必须拆卸Mozilla浏览器,并将其重新绘制为我们第一个产品颜色)。当然,它适用于简单的应用程序,但如果您希望制作OpenGL、3D音频和其他炫酷的东西,XULRunner将显得太过有限。
我相信暴雪公司有一些针对这种情况的跨平台框架... :) 祝好运!
皮埃尔。

3
尝试在一个平台上开发应用程序,然后在许多平台上使用并不是一个好方法。最好的情况是,您将创建应用程序,这些应用程序对于您没有开发的平台的用户感到陌生。
更有可能的是,您会遇到一些意想不到的兼容性问题。如果您想走这条路,Java可能是最好的选择。交叉编译会导致自动生成的代码难以调试和维护。
当然,您可以在某些情况下使用移植工具,但我认为这不是一个可以提供通用自动化解决方案的问题。

2
坦白地说,要想一次性构建跨平台的应用程序,唯一可靠的方法就是使用Java,但需要先安装一个相当大的运行时环境。
然而,如果这不是一个选项,我建议关注Qt的最新发展——它现在可以在LGPL下使用(或者应该很快就可以),这意味着你不需要再付费了。使用GCC和Qt,我发现在不同平台上进行交叉编译时,只要使用Qt的类/代码/对象,并确保任何你创建或使用的非Qt代码都能在跨平台上编译,那么这种方法是完美的。

2
您没有提到具体的编程语言(但我猜测是因为 GUI 工具包而选择了 C 或 C++),所以很难给出一个确切答案来回答您的问题。
如果您想要“真正”的跨平台,我首先会考虑是否可以使用不那么依赖于特定平台的语言来解决您的问题。Python、Java 和许多其他语言都可以在一个平台上编写代码,并在多个平台上运行。
如果您仍然想使用 C/C++,GCC 提供了交叉编译的选项,如果与 QT 结合使用(QT 很快将可用于 LGPL),您应该能够得到一些工作成果。

1

1
Java一直试图实现“编写一次,到处运行”的理念。在某些情况下它表现良好,但操作系统中有太多“独特”的东西。GCC提供了跨平台编译应用程序的能力,但你会遇到同样的问题。代码只会有更好的性能。RIA方法似乎可行,但它不像本地应用程序那样自然。

1
即使使用跨平台GUI工具包,也无法解决所有跨平台问题。毕竟,应用程序不仅仅是GUI。交叉编译永远无法捕获本地构建能捕获的所有问题。如果您要支持多个平台,您至少需要在每个平台上进行测试。但希望您可以在进行测试的同时进行本机构建,并打开所有警告。

1

如果想进行跨平台开发,您可以使用 Phone Gap、Appcelerator (Titanium)、Corona 等工具。它们都提供了基于 JavaScript 的框架,最终可在不同平台上运行。我正在使用的是 Titanium 进行移动开发,这使我们能够使用原生代码开发应用程序...(这是非常好的优势)。Phone Gap 提供的是一个一般不是原生应用程序的 Web 应用程序... 这些软件用于跨平台支持的开发... 并支持 Windows、Linux 和 Mac OS。


0

基于我的个人经验,我认为你应该采用Java:这样你就可以避免很多麻烦。

你可以在任何平台上开发,而且无需为每个目标平台编译,正如你所提到的。

例如,我在Linux下开发,只需点击“编译”一次,生成的文件就可以在任何地方运行(Windows、Mac、Solaris、z/OS等)。双击即可在任何平台上运行它(必须安装Java运行时环境,但大多数用户已经安装了,如果没有,只需下载、安装,“下一步”,“下一步”,“确定”即可)。

如果选择“Java Web Start”部署方法,就更容易了:用户只需在网页上点击启动按钮,应用程序就会运行(如果根据JNLP描述符中指定的内容安装了适当的JVM),或者用户将被重定向到Java下载页面(如果找不到合适的JVM)。

GUI开发(使用Swing工具包)非常容易和强大,特别是如果你使用正确的工具(即Netbeans IDE)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接