【问题标题】:Is there a way to use <X11/Xlib.h> and <X11/keysym.h> with MinGW?有没有办法将 <X11/Xlib.h> 和 <X11/keysym.h> 与 MinGW 一起使用?
【发布时间】:2020-10-04 04:46:16
【问题描述】:

我在浏览 IOCCC 网站时偶然发现了一个名为 banks 的 1998 年条目,它是 Carl Banks 的飞行模拟器。我想尝试一下,所以下载了文件,但你可能知道(来自 MinGW)我在 Windows 系统上,很遗憾(特别是 Win-7 32 位),当我尝试使用 Cygwin 和 MinGW 编译文件时它显示了

banks.c:3:16: fatal error: X11/Xlib.h: No such file or directory
3 | #include       <X11/Xlib.h>
  |                ^~~~~~~~~~~~
compilation terminated.
make: *** [makefile:92: banks] Error 1

包括代码banks.c

#include                     <math.h>
#include                   <sys/time.h>
#include                   <X11/Xlib.h>
#include                  <X11/keysym.h>

有没有办法不使用 Linux 编译文件?

【问题讨论】:

  • 也许我可以为您节省一点时间:出于好奇,我尝试在 Linux 系统上构建 bank.c,但失败了。除其他外,还有一大堆未定义的变量。我怀疑让它在 Windows 上构建只是问题的一部分。
  • @KevinBoone 但是,我遇到的唯一错误是上面的错误(使用makefile时),也没有任何警告。
  • C(或 C++)预处理器在 #include 行失败,实际编译根本没有开始。这就是您没有立即看到所有错误的原因。
  • 考虑到这是 IOCCC 的获奖作品,它不应该失败。但是,如果我们使用@ViktorLatypov 的答案的推理,我就会明白为什么会发生这种情况。但我还是会尝试寻找如何在windows中编译X11库
  • 确保您已使用 cygwin 安装应用程序安装了 libx11-devel。此软件包提供 x11/Xlib.h 和 x11/keysym.h 文件,以及构建 X11 客户端所需的其他文件。用 gcc 为 cygwin 编译。这将构建银行 x11 客户端。还要安装为 X11 服务器提供二进制文件的 xorg-server。并阅读 cygwin.com 上关于启动 xserver 的文档。

标签: c cygwin mingw32


【解决方案1】:

X Window 服务器有一个 Win32 端口,叫做 Xming,它经常用于连接远程 Unix 主机。

如果您在 MSys2 中使用 MinGW,有一个名为 mingw-w64-libxcb 的包,因此可以编译和使用基于 X11 的程序。

关于程序本身(banks.c),最好(虽然不是那么简单)直接为 WinAPI 编译它(是的,我知道这听起来比简单地运行 make 更难,但程序相当老,而且可能使用 1998 编译器的非标准和过时的扩展和特性,因此最好在熟悉的环境中调试/修复它,在您的情况下恰好是 Windows)。源代码(去混淆后)看起来像一个以图形为中心的程序

for ( ; XPending (e) ; )

loop,直接翻译成WinAPI的

while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    ... all the code here
}

窗口创建和键回调也被翻译成 WinAPI。

编辑1


该程序在 Linux 上的 X11 中开箱即用,但它还需要从标准输入提供一些数据(这在 Windows 上应该不是问题,但如果你没有安装“cat”,这也将是必需的)。

【讨论】:

  • 你能告诉我如何下载mingw-w64-libxcb。当我在 mingw 中打开 msys 目录时,它显示 1.0 是版本 1 吗?
  • 我猜“下载”的命令是“pacman -S
  • 好吧,你的意思是说我必须重写整个程序来编译它(考虑到我在这个领域的知识,这对我来说可能很难)或者只是上面的代码?
  • 不,您不必重写所有内容。由于 Xlib 的使用并不广泛,您可能会花费 15 分钟在虚拟机中安装一些简单的 Linux,并使用您可以在那里找到的最古老的 C 语言编译示例。
【解决方案2】:

当我在 1997 年编写它时,我确实使用 Cygwin 在 Windows 上对其进行了测试,所以我知道它当时可以工作,现在应该没有理由不工作。在 Cygwin 的包管理器中,您需要安装一个名为 libx11-dev 的包或类似的东西(X11 开发库),以及一个 X 服务器(可能称为 Xorg 之类的东西),当然还有 GCC 和开发make 之类的工具。您应该能够从开始菜单启动 Cygwin X 服务器,然后在 X 窗口内的后续终端窗口中,您可以 cd 到解压 IOCCC 获胜者的文件夹并运行 make。 (关于 Cygwin 的更多详细信息超出了本回复的范围;我主要是凭记忆,因为我已经多年没有使用 Cygwin。)

但是,如果您想听听我的意见,请不要打扰 Cygwin。构建和运行它的一种更简单的方法是获取 Linux 的 Live CD 并直接启动 Linux,然后在其中运行它。一些 Live CD 上有像 GCC 这样的开发工具,而另一些则可以让您轻松下载 GCC。 Knoppix 是一个常见的选择。

(如果你真的很古怪,你可以尝试安装适用于 Linux 的 Windows 子系统,这样你就可以在 Windows 上本地运行 Linux 程序。)

【讨论】:

    【解决方案3】:

    X11 是基于 Unix 的操作系统的窗口系统,因此它不能在 Windows 上使用本机

    但是有一种方法可以运行 X11 程序并使用 Cygwin 编译器编译它们。为此,您必须使用 Cygwin/X,它应该包含 X11 库。

    【讨论】:

    • 我是通过 Cygwin 安装 Cygwin/X 的,您能否详细说明如何使用它来运行 X11?
    • 请参阅cygwin.com 上的文档以开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2011-07-15
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多