使程序具备跨平台能力

3
我正在与一个使用Visual C++开发的OCR项目一起工作,该项目在.net框架上运行。 但是由于.net是平台相关的,我想使这个项目变得跨平台,并支持多个操作系统。
所以,有人可以给我一些提示如何做到这一点吗? 谢谢。

1
如果你想让它跨平台,那么选择.NET可能是你能做出的最糟糕的选择。微软并不希望它跨平台,而他们说了算。 - skaffman
@Skaffman,这怎么样?如果微软不希望Mono存在,他们就不会与Novell签署禁诉协议。 - Earlz
@skaffman,那可能是真的,但他们并没有说 .Net 不能跨平台,只是他们不会这样做。如果不是这种情况,Miguel 和 Mono 团队现在就会在处理繁琐的手续了。 - Lazarus
Mono对于微软来说是非常好的公关,因为他们希望人们认为.NET是平台相关的。但是,.NET有许多特定于Windows的部分,Mono不太可能实现所有这些部分。例如,我引用了Mono FAQ中的话:“很不可能(Mono)会实现完全兼容Windows.Forms所需的所有内容”。出于这个原因和类似的原因,无论他们想让你相信什么,.NET都不太可能在除Microsoft OS以外的任何其他系统上拥有完整/兼容的实现。 - mikera
3个回答

4

Mono 是一个跨平台实现 .NET 的工具,你可能会考虑使用它。


Mono甚至不是由微软编写的。请阅读Mono的创建者Miguel de Icaza几周前所说的话:http://www.itwire.com/opinion-and-analysis/open-sauce/37880-microsoft-has-shot-net-ecosystem-in-foot-de-icaza - mindas
3
@mindas,你知道Mono是由Miguel和他的团队开发的吗?它得到了微软的支持,是针对其他平台的.Net框架的一个非常好的实现。我认为Miguel的评论可能被断章取义了,也就是为什么文章被从源网站撤下的原因。是的,微软错过了一个机会,但这并不意味着它是一个糟糕或错误的平台。Miguel从Mono发展出了MonoTouch,以在iPhone上实现 .Net 开发,这并不表明他认为 .Net 在某种程度上存在致命的缺陷。 - Lazarus
事实上,甚至SO也为MonoTouch提供广告 :) - Justin Ethier
1
我并没有说.net/Mono有缺陷。我甚至认为在各个方面,.net都比Java更出色(以泛型为例)。但我的意思是,只有当微软编写至少一个非Windows实现时,我才会开始相信.net是跨平台的。如果您不同意我的看法,请告诉我企业界中Mono的使用情况,它与MS .net实现相比如何?他们的FAQ页面上说:“Mono API今天介于.NET 2.0和.NET 3.5之间”,而V4是由微软于2008年9月29日宣布的。我需要再补充吗? - mindas

2
为什么你在使用运行在.NET框架上的Visual C++?我建议您要么切换到本地C++,要么使用更好的.NET语言,如C#。老实说,我不确定Mono是否能够处理托管C++。
如果切换到本地C++,请确保将任何特定于平台的部分抽象出来。此外,确保您的应用程序可以在32位和64位上运行。使用平台无关的API,如GTK或WxWidgets。
如果选择使用C#,则需了解一些Mono不支持(也永远不会支持)的API。不要编写任何不安全的代码或P/Invokes。
无论您选择哪种方式,始终定期在Windows和Linux上测试您的程序。如果在Linux上运行良好,通常也会在Mac上运行良好,但最好每天至少测试三个平台。

原始代码是由他人使用V C++在.net框架上编写的,这是Sahana OCR项目。现在我打算在Gsoc上提出一个项目,使其具有平台独立性。除了使用Visual C++运行它之外,还有其他运行它的方法吗? - Thilanka

1

你也可以尝试使用Qt。你可以在Windows平台上使用Visual C++,在其他平台(Mac/Linux)上使用g++。它提供的GUI比Mono更好。


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