我试图了解 MinGW 如何将 GCC 移植到 Windows。我知道 GCC 起源于 Unix 世界,由于多种原因,它不能简单地作为可执行文件复制到 Windows,也不能使用 Windows 提供的本机工具链从源代码构建。这是因为 Unix 和 Windows 之间的程序创建和执行不同。
具体来说,我了解 GCC 需要通过在预期位置找到的运行时库与操作系统进行交互。假设这些库的模拟是 Windows 上的 DLL,那么 GCC 必须以某种方式链接这些 DLL。
以 GCC 作为具体示例,我想知道:MinGW 在 GCC 源代码中进行了哪些更改并构建以将其移植到 Windows?
我查看了 MinGW-w64 源代码,但它超出了我的理解范围。我还尝试阅读 MinGW 和 MinGW-w64 的维基百科页面,以了解它们的背景和目标。但我还是觉得我没有回答我的问题。
GCC 已经支持 Windows 使用的架构。
但是必须重写标准库才能支持 Windows。
就像newlib是支持嵌入式系统的标准库的替代品一样,MinGW/MinGW-w64本质上是使用本机Windows API调用来替代标准库。
但远不止于此,GCC(以及 binutils 和 gdb 等其他工具)也必须进行一些更改才能支持 Windows 平台。这包括 Windows 特定的可执行文件二进制文件格式(
.exe
文件)和使用 PE/PE+ 格式(基于 COFF 格式)的共享库(.dll
文件)。
请注意,MinGW-w64 并不专门链接到 GCC,因为 LLVM 也可以与 MinGW-w64 一起使用(请参阅此处)。