我正在开发一个用 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/lib
、pkg-config
文件位于/usr/x86_64-w64-mingw32/lib/pkgconfig
,这是工具链期望找到它们的位置。
关于pkg-config
,您应该检查您的./configure
呼叫是否使用x86_64-w64-mingw32-pkg-config
(这应该通过该--host
选项自动发生)。mingw-w64-tools
如果您还没有安装,则需要安装。
(我是mingw-w64
Debian 的维护者。我会对您提供的任何反馈感兴趣 — 特别是,我已经考虑打包 Windowsiconv
一段时间了,如果这可以节省您的时间,我会将其推向更高的位置待办事项清单。)