GCC是一个多平台的编译器,有一个版本的Linux,MacOS的版本,该编译器的Windows版本。 “MinGW GCC”是现有的至少两个Windows版本之一。 “MinGW系统”不过是一些GNU工具的Windows版本的集合。
我刚才读MinGW的维基条目和“由Win32 API提供”似乎澄清“Cygwin的”和“MinGW的”之间的区别 - 不是“MinGW的”和Microsoft C编译器之间:
对于许多GNU工具,Windows有两种不同的版本:“Cygwin”和“MinGW”。
“Cygwin”使用特殊的仿真环境来模拟一个类Unix的文件系统。一个特殊的库将被链接到程序,其中诸如“fopen”的函数将以“/home/mydir/myfile.txt”的形式将文件名转换为诸如“c:\ programs \ cygwin \ home \ mydir \ myfile”之类的文件名。文本”。
使用“Cygwin”编译器,“gcc”命令行和创建的程序(更确切地说:链接)的程序的命令行都需要Unix类文件名。
然而,“MinGW”工具的行为与其他Windows程序类似,并且使用像“fopen”这样的函数需要像“c:\ somedir \ somefile”这样的“正常”Windows类文件名的正常Windows库。由“MinGW”GCC编译器构建的程序的行为与Microsoft编译器构建的程序相似。
与Linux不同,Windows不附带任何头文件,但它们附带必须从Microsoft下载(> 1GiB)的Win32 API。 MinGW和Cygwin提供了一些自己的头文件,这些头文件几乎与Microsoft的兼容,因此不需要下载Win32 API。
Windows中的大多数开发工具都使用相同的对象和静态库文件格式。 (“Watcom”编译器是少数几个例外之一。)这意味着您可以混合使用不同编译器编译的对象和静态库文件。 (.LIB格式/用于针对的DLL动态链接.A存根库gcc和微软之间是不同的,所以你不能混用他们!)
关于其他答案的评论:
- MinGW通常链接到Windows附带的“msvcrt.dll”。该文件包含标准C函数,如“printf()”。
- Microsoft Visual C++有时会链接到“msvcrt.dll”,有时会链接到某些DLL,如“msvcr100.dll”。 “msvcr100.dll”还包含标准的C函数,但其中一些具有增强的功能(例如Unicode ...)。 “msvcr100.dll”必须后安装,因为它不附带Windows。
- Cygwin链接到包含标准C函数的Cygwin变体(文件名称处理不同)的“cygwin1.dll”等文件。毋庸置疑,这个文件不会随Windows一起提供,但必须在安装后进行。
与Linux中的“libc”不同,所有这些DLL不直接调用操作系统,但它们调用包含较低级函数(如“WriteFile()”)的“kernel32.dll”,它将调用操作系统。
这更像是他们在Win32上提供类似Linux的包装。然后,头文件需要更像Linux头文件,而实现将实际调用到Win32 API中。 –
(1)是的。 (2)MinGW仅提供* Win32 API提供的功能,与Cygwin相反,它在Windows之上提供了一个类似Unix的仿真层。 (3)MinGW支持Windows内置C运行时使用的调用约定,因此您可以链接到它;但请注意,Microsoft不支持第三方使用内置运行时,所以不能保证它可以可靠地工作(尽管实际上它大部分都是这样)。 –
问:默认情况下,Windows安装不会提供Win32 API标头。答:不可以。Windows头文件和库分开安装。使用Windows SDK。或者使用Windows编译器,如MSVS ...或MinGW。 – FoggyDay