随着开源项目的大惊小怪,为什么仍然没有一个强大的标准可以让您制作可移植的代码(我的意思是C/C++
不是Java
或C#
)每个人都在做自己的汤。
甚至还有一些第三方库,例如Apache Portable Runtime
.
7 回答
是的,没有标准,但是当您进行跨平台开发时,像Qt和boost这样的库可以让您的生活变得更加轻松。
wxwidgets 是大多数窗口管理器的原生 GUI 小部件上的一个很好的抽象层。
ADAPTIVE Communication Environment (ACE)是一个出色的面向对象框架,它为所有低级操作系统功能(如线程、套接字、互斥锁等)提供跨平台支持。它与大量编译器和操作系统一起运行。
C 和 C++ 作为语言是标准语言。如果您在编码时严格遵循他们的规则(这意味着不使用特定于供应商的扩展),那么您的代码应该是可移植的,并且您应该能够在任何操作系统上使用任何现代编译器对其进行编译。
然而,C 和 C++ 没有像 Java 或 C# 那样的 GUI 库,但是有一些免费或商业的 GUI 库可以让您编写可移植的 GUI 应用程序。
我认为最受欢迎的是Qt(商业)和wxWidgets(FOSS)。根据维基百科,还有更多。
还有 boost,而不是 GUI 库boost是对 C++ 的 STL 的一个非常好的补充。事实上,一些 boost 库将被添加到下一个 C++ 标准中。
我认为没有任何人同意任何单一库的主要原因是每个人的要求都不同。当您想要包装系统库时,您通常需要对用例的内容做出一些假设,除非您想让包装器变得庞大且无法使用。我认为这可能是没有单一、通用的跨平台运行时的主要原因。
对于 GUI,原因可能是每个平台都有自己的 UI 约定,你不能编写一个适合所有的 GUI,你只会得到一个只适合一个甚至根本不适合的 GUI。
有许多库可以让跨平台开发更容易,但是为所有平台制作一个完整的包装器最终要么是小而高度定制的,要么是庞大而完全荒谬的。
得出它的逻辑结论,一个操作系统所有方面的完整包装器成为一个完整的虚拟运行时。您不妨制作自己的编程语言。
如果您确保它可以与 GCC 和 MS VC++ 一起干净地编译,那么移植到其他地方就不需要额外的努力了。