我希望这不会成为一个愚蠢的问题,但这始终是我一直想知道的事情。Windows(Win32 API)和OS X(Cocoa)都有自己的API,可以处理窗口,事件和其他OS内容。对于Linux的等效功能,我从未真正有明确的答案。
我听说有人说GTK +,但是GTK +是跨平台的,怎么会是本地的呢?
我希望这不会成为一个愚蠢的问题,但这始终是我一直想知道的事情。Windows(Win32 API)和OS X(Cocoa)都有自己的API,可以处理窗口,事件和其他OS内容。对于Linux的等效功能,我从未真正有明确的答案。
我听说有人说GTK +,但是GTK +是跨平台的,怎么会是本地的呢?
Answers:
在Linux中,图形用户界面不是操作系统的一部分。大多数Linux桌面上的图形用户界面由称为X Window System的软件提供,该软件定义了一种与设备无关的方式来处理屏幕,键盘和指针设备。
X Window定义了用于通信的网络协议,任何知道如何“说”该协议的程序都可以使用它。有一个名为Xlib的C库,可以更轻松地使用此协议,因此Xlib是本机GUI API的一种。Xlib并不是访问X Window服务器的唯一方法。还有XCB。
之所以使用XKit之上的GTK +(由GNOME使用)和Qt(由KDE使用)之类的工具包库,是因为它们易于编程。例如,它们在整个应用程序中为您提供一致的外观和感觉,使拖放操作变得更容易,为现代桌面环境提供了标准的组件,等等。
X在内部如何在屏幕上绘制取决于实现方式。X.org具有独立于设备的部分和独立于设备的部分。前者管理诸如Windows之类的屏幕资源,而后者则与通常为内核模块的图形卡驱动程序通信。通信可以通过直接内存访问或通过系统调用内核来进行。驱动程序将命令转换为卡上硬件可以理解的形式。
截至2013年,一个名为Wayland的新窗口系统开始可用,许多发行版都表示他们将在某个时候迁移到该窗口,尽管目前尚无明确的时间表。该系统基于OpenGL / ES API,这意味着将来的OpenGL将成为Linux中的“本地GUI API”。正在完成将GTK +和QT移植到Wayland的工作,因此当前流行的应用程序和桌面系统将需要进行最小的更改。X11服务器将支持无法移植的应用程序,就像OS X通过Xquartz支持X11应用程序一样。GTK +端口预计将在一年内完成,而Qt 5已获得Wayland的完整支持。
更复杂的是,Ubuntu宣布由于Wayland遇到的问题而正在开发一个名为Mir的新系统。该窗口系统也基于OpenGL / ES API。
Linux是内核,而不是完整的操作系统。在Linux之上运行不同的窗口系统和gui来提供窗口。通常,X11是Linux发行版使用的窗口系统。
HAL
是一个错误使用的术语。他们真正在说的是X11提供了一种独立于系统的方式来显示窗口。有适用于Darwin的X11版本(Mac OS-实际上,现在使用Mountain Lion更加复杂...),MS Windows和Linux。
Wayland也值得一提,因为它通常被称为“未来X11杀手”。
还要注意,尽管Android和其他一些移动操作系统具有Linux内核,但它们并不包含X11,因此从这个意义上说,X11并不是所有Linux系统都固有的。
跨平台与原生无关。Cocoa也已经通过GNUStep移植到其他平台,但是它仍然是OS X / macOS的本机。
严格来说,Linux的API由其系统调用组成。这些都是用户模式(非内核)程序可以调用的所有内核功能。这是一个非常低级的界面,允许程序执行打开和读取文件之类的操作。有关一般介绍,请参见http://en.wikipedia.org/wiki/System_call。
真正的Linux系统还将在其上运行其他软件的整个“堆栈”,以提供图形用户界面和其他功能。该堆栈的每个元素将提供自己的API。
为了帮助已经提到的内容,此博客中对Linux图形堆栈进行了很好的概述:http : //blog.mecheye.net/2012/06/the-linux-graphics-stack/
这解释了X11 / Wayland等以及它们如何组合在一起。除了已经提到的内容外,我认为值得添加一些有关以下API的信息,您可以在Linux中将其用于图形处理:
Mesa- “ Mesa有很多东西,但是它提供的最著名的主要功能之一就是它的OpenGL实现。它是OpenGL API的开源实现。”
开罗 -“开罗是一个绘图库,可以被Firefox之类的应用程序直接使用,也可以被GTK +之类的库使用,以绘制矢量形状。”
DRM(Direct Rendering Manager) -我对此了解最少,但基本上是内核驱动程序,可让您直接将图形写入帧缓冲区而无需通过X
我想这个问题更像是“什么是Linux的本地GUI API”。
在大多数情况下,X(也称为X11)将用于此目的:http : //en.wikipedia.org/wiki/X_Window_System。
您可以在此处找到API文档
XWindows可能是最接近所谓的“本机”的东西:)
在Linux中,最接近Win32的是libc,因为您不仅提到了UI,而且还提到了事件和“其他操作系统”。
ioctl
您一样进行系统调用,您必须包含中的内容sys/
。
Xlib
不是libc
。
解释最初的问题:
问:
Microsoft和Apple应用程序编程接口在Linux上等同于什么?
A.“ Linux内核API”。 https://www.kernel.org/doc/htmldocs/kernel-api