我知道这很奇怪,但我需要在MS Windows平台上执行支持X11协议的Qt GUI应用程序。
很明显,如果我在Unix环境中构建我的Qt源代码,它会自动成为一个X11应用程序,这个应用程序只能在Unix操作系统上运行,而不能在MS Windows上运行。
我尝试使用MXE(MinGW交叉环境)在Unix for Windows中编译我的应用程序,但它对X11问题没有帮助。它为Windows创建一个应用程序,但该应用程序不是XWindow应用程序。
还有一个针对minGW的XPortMinGW项目。但我不知道它是否适用于Qt应用程序。
有没有办法构建我的Qt应用程序,可以在Windows操作系统中运行X11支持?
答案 0 :(得分:2)
我认为不需要交叉编译。有两个问题:
为Windows编译Xlib。我不知道任何移植到Windows的Xlib实现的实现。你肯定需要找到一个,或者做一个。希望Xlib仅依赖于少数几个posix API,它们可能很容易转换为win32。忘记Cygwin。
您可能幸运地将Xlib移植到Qt的网络后端,并在此过程中使其成为跨平台的。 Xlib将简单地使用Qt的核心和网络模块。没问题。
这里的好消息是Qt 5带有捆绑的Xlib实现。在Windows上进行编译可能比其他实现更容易。
在Windows上使用所述Xlib配置Qt进行构建。为了做到这一点,你可能想要搞乱并重建Qt附带的配置工具,并添加一个将与Xlib链接的makepec。
这对Qt 5来说应该更容易。
这不是一件完全无关紧要的事情,但应该是可能的。给自己一个月,期待与Qt的配置和Xlib的一些细节非常亲密。
如果您的应用程序是闭源的并在您的组织外部分发,则需要购买商业许可证才能重新分发cygwin.dll。否则,Cygwin是GPL,仅链接到cygwin.dll会使您的应用程序成为派生工作。
当你在同一个应用程序中混合使用posix和非posix代码时,Cygwin会出现问题,特别是如果非posix代码是像Qt这样的大型框架。您当然可以在Qt中使用Posix平台代码,并将其全部运行在Cygwin上,但这会导致性能下降并使自己面临Cygwin模拟POSIX API的缺点。
将Cygwin用于Xlib /窗口系统,但如果Qt使用Windows API,可能需要对Qt代码进行大量调整。所以当然可以在Windows上使用Qt和Xlib,但至少你不必调试/解决Cygwin的怪癖。