如何正确设置Windows交叉编译环境?

如何正确设置Windows交叉编译环境?

我正在开发一个用 C 编写的应用程序,该应用程序至少可以在 Linux 和 Windows 上运行。我通常在 Linux 上工作,因此我希望能够为 Windows 交叉编译我的应用程序。

我当前的设置:

  • Debian GNU/Linux amd64
  • 没有复杂的构建系统,只有简单的 Makefile
  • Linux 使用 GCC,Windows 使用 MinGW

我的应用程序依赖于许多库。幸运的是,我的发行版提供了开发标头,因此使用 pkg-config 来确定 CFLAGS 和 LDFLAGS,Linux 编译几乎是开箱即用的。

它对于 Windows 来说效果不太好。我的发行版为 x86_64-w64-mingw32 提供了一个编译器工具链,它能够找到开发头文件,但对于某些库,我需要针对 Windows 的不同版本。很遗憾,这些我的发行版不提供版本,因此我必须自己安装它们。

那么:我在哪里安装 Windows 的开发头文件?如何让 pkg-config 找到它?有没有一种方法可以使用单个命令为 Windows 进行编译,就像我可以通过调用为 Linux 进行编译一样make


就我而言,有问题的库之一是 SDL2。尝试使用我的发行版附带的标头进行编译会生成一个fatal error: iconv.h: No such file or directory.谷歌搜索此错误也告诉我们使用 Windows 版本。其他库似乎在编译阶段可以工作,但显然在链接阶段找不到它们。

答案1

x86_64-w64-mingw32您应该使用前缀构建想要与工具链一起使用的任何库/usr/x86_64-w64-mingw32;通常:

./configure --prefix=/usr/x86_64-w64-mingw32 --host=x86_64-w64-mingw32

以及您需要的任何其他选项。

这将确保标头最终位于/usr/x86_64-w64-mingw32/include、库位于/usr/x86_64-w64-mingw32/libpkg-config文件位于/usr/x86_64-w64-mingw32/lib/pkgconfig,这是工具链期望找到它们的位置。

关于pkg-config,您应该检查您的./configure呼叫是否使用x86_64-w64-mingw32-pkg-config(这应该通过该--host选项自动发生)。mingw-w64-tools如果您还没有安装,则需要安装。

(我是mingw-w64Debian 的维护者。我会对您提供的任何反馈感兴趣 — 特别是,我已经考虑打包 Windowsiconv一段时间了,如果这可以节省您的时间,我会将其推向更高的位置待办事项清单。)

相关内容