MinGW or Cygwin GCC?
我想在Windows中为Eclipse IDE安装GCC编译器。 我知道有两种选择:MinGW GCC或Cygwin GCC。 Eclipse CDT哪个更好? 任何经验或建议,将不胜感激。
-
使用任何您喜欢的。 我建议您使用MinGW,这样您就可以避免讨厌的cygwin1.dll依赖关系。
-
Cygwin和MinGW有什么区别?
使用Cygwin意味着您的程序将依赖于cygwin1.dll,它实际上是一个允许在Windows环境中使用POSIX功能的层。使用标准的MinGW GCC进行编译不提供这种依赖性。但是,这意味着,如果您打算使用MinGW GCC进行编译,则将无法访问POSIX函数,例如fork()和exec()。
有关Cygwin和MinGW之间差异的更多信息,请参见此处。
-
我尝试安装MinGW,但除不支持POSIX函数(如fork())外,它均能正常运行。但是,它确实支持POSIX线程,例如pthread。那么为什么它支持POSIX pthread但不支持fork()?我从/ mingw / include目录中的中发现,此头文件中没有fork()声明。
-
它支持pthread,因为存在Windows的实现。 Windows恰好有一些POSIX功能的实现,例如套接字和管道。一些实现(例如套接字)与POSIX对应几乎完全相同,但其他实现则完全不同(例如管道)。 MinGW只是GCC的端口,它不会尝试为Windows模拟POSIX功能,因为Windows不是POSIX兼容系统。那就是Cygwin出现的地方。您可以将Cygwin视为在Windows中提供POSIX功能实现的端口。
-
致谢,非常感谢您详细解释。这对于理解MinGW和Cygwin在POSIX兼容性方面的区别非常有帮助。
维基百科说:
MinGW来自Cygwin的1.3.3版本。尽管Cygwin和MinGW都可以用于将UNIX软件移植到Windows,但是它们有不同的方法:Cygwin旨在提供一个完整的POSIX layer,它提供对现有多个系统调用和库的仿真在Linux,UNIX和BSD变体上。 POSIX layer在Windows之上运行,在必要时为了兼容性而牺牲了性能。因此,此方法要求用Cygwin编写的Windows程序在必须与该程序一起分发的带版权的兼容库以及该程序的source code上运行。 MinGW旨在通过直接Windows API calls提供本机功能和性能。与Cygwin不同,MinGW不需要兼容层DLL,因此不需要与source code一起分发程序。
因为MinGW依赖于Windows API calls,所以它不能提供完整的POSIX API。它无法编译可以用Cygwin编译的某些UNIX applications。具体地说,这适用于需要POSIX功能(例如fork(),mmap()或ioctl())的应用程序,以及希望在POSIX environment中运行的应用程序。使用本身已移植到MinGW的cross-platform library编写的应用程序,例如SDL,wxWidgets,Qt或GTK+,通常在MinGW中的编译就像在MinGW中一样容易。 x4>。
MinGW和MSYS的组合提供了一个小型的独立环境,可以将其加载到可移动介质上,而无需在注册表中保留条目或在计算机上保留文件。 Cygwin Portable提供了类似的功能。通过提供更多功能,Cygwin的安装和维护变得更加复杂。
cross-compile Windows applications和MinGW-GCC under POSIX systems也可以。这意味着开发人员不需要在Windows上安装MSYS即可编译将在Windows上运行而没有Cygwin的软件。
我个人更喜欢Cygwin,它具有很多安装选项,并且感觉很像您在Linux机器上可以找到的终端。它提供了相当大量的类似于Linux的功能,而Windows却在此方面失败了。
我的临时想法是,如果您需要Cygwin,则需要它。例如,为Unix开发的编译程序在构建系统中具有符号链接和shell脚本。
如果您不需要它,则不需要它。与使用cygwin路由相比,在Linux上的虚拟机上进行编译通常是更好的选择。
所以mingw很好。效果很好,易于使用。
另外:您可以考虑使用Codelite(www.codelite.org)而不是Eclipse。
-
非常感谢Gibbon1解释了差异。
-
我忘了提,codelite与mingw捆绑在一起。单击安装,然后完成。
Cygwin和Mingw不能互换。 Cygwin用于编译POSIX API程序,Mingw用于编译Windows API程序。
根据要编写的程序类型选择一个或另一个。