3

我知道这很奇怪,但我需要在 MS Windows 平台上执行支持 X11 协议的 Qt GUI 应用程序。

很明显,如果我在 Unix 环境中构建我的 Qt 源代码,它会自动成为 X11 应用程序,并且该应用程序只能在 Unix 操作系统上运行,而不能在 MS Windows 上运行。

我尝试使用 MXE(MinGW 跨环境)在 Unix for Windows 中编译我的应用程序,但它对 X11 问题没有帮助。它为 Windows 创建了一个应用程序,但该应用程序不是 XWindow 应用程序。

minGW 还有一个 XPortMinGW 项目。但我不知道它是否适用于 Qt 应用程序。

有什么方法可以构建我的 Qt 应用程序,它支持 X11,可以在 Windows 操作系统中运行?

4

1 回答 1

2

我认为不需要交叉编译。有两个问题:

  1. 为 Windows 编译 Xlib。我不知道移植到 Windows 的任何维护的 Xlib 实现。你肯定需要找到一个,或者做一个。希望 Xlib 仅依赖于少数 posix API,它们可能很容易转换为 win32。忘掉赛格温吧。

    您可能有幸将自己的 Xlib 移植到 Qt 的网络后端,并在此过程中使其跨平台。Xlib 将简单地使用 Qt 的核心和网络模块。没问题。

    好消息是 Qt 5 附带了一个捆绑的 Xlib 实现。与其他一些实现相比,在 Windows 上编译它可能要容易得多。

  2. 将 Qt 配置为在 Windows 上使用所述 Xlib 进行构建。为了正确地做这件事,你可能想要弄乱一点并重新构建 Qt 附带的配置工具,并添加一个将与 Xlib 链接的 makespec。

    使用 Qt 5 应该更容易做到这一点。

这不是一件完全微不足道的事情,但应该是可能的。给自己一个月的时间,期望能非常熟悉 Qt 的配置和 Xlib 的一些细节。

关于 Cygwin 的注意事项

  1. 如果您的应用程序是封闭源代码并在您的组织之外分发,您需要购买商业许可证才能重新分发 cygwin.dll。否则,Cygwin 是 GPL 并且仅链接到 cygwin.dll 会使您的应用程序成为派生作品。

  2. 当您在同一个应用程序中混合使用 posix 和非 posix 代码时,Cygwin 会出现问题,尤其是当非 posix 代码是像 Qt 这样的大型框架时。您当然可以在 Qt 中使用 Posix 平台代码并使其全部在 Cygwin 上运行,但这样会降低性能并暴露于 Cygwin 的 POSIX API 仿真的缺点。

  3. 将 Cygwin 用于 Xlib / 窗口系统但让 Qt 使用 Windows API 可能需要对 Qt 代码进行大量调整。所以当然可以在 Windows 上使用 Qt 和 Xlib,但至少你不必调试/解决 Cygwin 的怪癖。

于 2012-06-16T05:06:54.530 回答