MinGW还是Cygwin的GCC?

8

我想在Windows上为Eclipse IDE安装GCC编译器。我知道有两个选项:MinGW GCC或Cygwin GCC。哪一个更适合Eclipse CDT?任何经验或建议将不胜感激。


使用任何你喜欢的工具。我建议选择MinGW,这样你就可以避免烦人的cygwin1.dll依赖问题。 - Andrejs Cainikovs
可能是什么是Cygwin和MinGW之间的区别?的重复问题。 - Cole Tobin
5个回答

11
使用Cygwin意味着你的程序将依赖于 cygwin1.dll ,它本质上是一个层,允许在Windows环境中使用POSIX功能。使用标准的MinGW GCC编译不会产生这种依赖关系。这意味着,如果你打算使用MinGW GCC进行编译,你将无法访问POSIX函数,例如fork()exec()
有关Cygwin和MinGW之间差异的更多信息,请参见这里

我尝试安装MinGW,工作得很好,但它不支持POSIX函数,如fork()。然而,它支持POSIX线程,如pthread。那么为什么它支持POSIX pthread却不支持fork()呢?我发现/mingw/include目录下的<unistd.h>文件中没有fork()声明。 - tonga
2
它支持pthread,因为存在其Windows实现。某些POSIX函数(如套接字和管道)的Windows实现恰好存在。一些实现(如套接字)与其POSIX对应物几乎相同,但其他实现(如管道)则完全不同。MinGW只是GCC的一个移植版本,它并不尝试在Windows上模拟POSIX函数,因为Windows不是一个符合POSIX标准的系统。这就是Cygwin的作用。您可以将Cygwin视为提供Windows中POSIX函数实现的移植版本。 - wardd
1
wardd,非常感谢您详细的解释。这对于理解MinGW和Cygwin在POSIX兼容性方面的区别非常有帮助。 - tonga

2

个人而言,我更喜欢Cygwin,它有很多安装选项,并且感觉很像Linux机器上的终端。它提供了相当多类似于Linux的功能,这是Windows在此方面非常失败的。


1
感谢 earl3s 的回答。 - tonga

2
如果你需要cygwin,那么你就需要它。例如编译为Unix开发并在构建系统中使用符号链接和shell脚本的程序。
如果你不需要它,那么你就不需要它。在虚拟机上使用Linux进行编译通常比使用cygwin更好。
因此,mingw是完全可以的。它运行良好,易于使用。
另外:你可能考虑使用codelite(www.codelite.org)而不是Eclipse。

非常感谢Gibbon1解释这个区别。 - tonga
我忘了提到,codelite附带mingw。点击安装即可完成。 - Gibbon1

1
Cygwin和Mingw不是可以互换的替代品。Cygwin用于编译POSIX API程序,而Mingw用于编译Windows API程序。
根据你要编写的程序类型选择其中一个。

1
"Wikipedia Says:"(维基百科说:) MinGW是从版本1.3.3的Cygwin分叉而来。虽然CygwinMinGW都可以用于将UNIX软件移植到Windows,但它们有不同的方法: Cygwin旨在提供完整的POSIX层,提供了几个系统调用和库的仿真,这些系统调用和库存在于LinuxUNIXBSD变种中。该POSIX层运行在Windows之上,在必要时为了兼容性而牺牲性能。因此,这种方法需要使用Cygwin编写的Windows程序在一个开放版权的兼容性库之上运行,该兼容性库必须与程序一起分发,以及程序的源代码MinGW旨在通过直接的Windows API调用提供本地功能和性能。与Cygwin不同,MinGW不需要兼容性层DLL,因此程序不需要随源代码一起分发。
由于MinGW依赖于Windows API调用,它无法提供完整的POSIX API;它无法编译一些可以使用Cygwin编译的UNIX应用程序。具体而言,这适用于需要POSIX功能(如fork()、mmap()或ioctl())以及期望在POSIX环境中运行的应用程序。使用已经移植到MinGW的跨平台库(如SDL、wxWidgets、Qt或GTK+)编写的应用程序通常可以像在Cygwin中那样轻松地编译。
MinGW和MSYS的组合提供了一个小型、自包含的环境,可以加载到可移动介质上,而不会在注册表中留下条目或在计算机上留下文件。Cygwin Portable提供了类似的功能。通过提供更多功能,Cygwin变得更加复杂,需要安装和维护。

使用在POSIX系统下的MinGW-GCC,也可以进行Windows应用程序的交叉编译。这意味着开发人员不需要安装带有MSYS的Windows来编译软件,该软件可以在没有Cygwin的情况下运行于Windows上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接