【问题标题】:Qt X11 application built for Windows platform为 Windows 平台构建的 Qt X11 应用程序
【发布时间】:2012-06-15 10:46:37
【问题描述】:

我知道这很奇怪,但我需要在 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 操作系统中运行?

【问题讨论】:

  • “支持X11协议”是什么意思?
  • 您如何看待不支持 X11 的 Windows 中的 X11 支持?如果你有一个 Qt GUI 项目,只需在 Unix 下构建它以获得 Unix 可执行文件(支持 X11)并在 Windows 下构建它以获得 Windows 可执行文件(带有 Windows 图形系统)。
  • "它为 Windows 创建了一个应用程序" -- 有什么问题吗?它运行了吗?
  • 有一些 Windows 的 X 服务器实现,如果这就是你的意思的话......只是谷歌它。如果“支持 X11 协议”是指你有一些 X11 特定的代码与 qt 小部件混在一起 - 忘了它吧,除非你使用一些 #ifdefs 和 windows 等价物,否则它将无法工作。
  • “支持X11协议”表示; GUI 应用程序使用 Windows 操作系统中的 X11 库而不是原生 Windows GUI 库。

标签: qt mingw x11 cross-compiling mxe


【解决方案1】:

我认为没有必要进行交叉编译。有两个问题:

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

    您可能有幸自己将 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 的怪癖。

【讨论】:

  • cygwin.dll 现在是 LGPL,所以如果我正确理解许可证,您可以分发它。 (如果我错了,请纠正我!)
  • @PfunnyGuy 确认后,请随意编辑答案。
  • "在源代码的 winsup 子目录中找到的 Cygwin™ API 库被 GNU Lesser General Public License (LGPL) 版本 3 或更高版本所涵盖。有关 LGPLv3 要求的详细信息,请阅读GNU Lesser General Public License (LGPL)。”我对 LGPLv3 的理解意味着,如果您将 cygwin.dll 文件与您的二进制文件打包在一起,您就不必发布您的源代码。需要注意的是,我不是律师,也没有就此事寻求法律顾问。
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
相关资源
最近更新 更多