我想让我的c++项目跨平台,我正在考虑使用Cygwin/MinGW。 但是它们之间有什么区别呢?

另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?


当前回答

Cygwin is designed to provide a more-or-less complete POSIX environment for Windows, including an extensive set of tools designed to provide a full-fledged Linux-like platform. In comparison, MinGW and MSYS provide a lightweight, minimalist POSIX-like layer, with only the more essential tools like gcc and bash available. Because of MinGW's more minimalist approach, it does not provide the degree of POSIX API coverage Cygwin offers, and therefore cannot build certain programs which can otherwise be compiled on Cygwin.

就两者生成的代码而言,Cygwin工具链依赖于到大型运行时库cygwin1.dll的动态链接,而MinGW工具链将代码编译为二进制文件,动态链接到Windows原生C库msvcrt.dll,以及静态链接到glibc的某些部分。Cygwin可执行文件因此更紧凑,但需要一个单独的可重新分发的DLL,而MinGW二进制文件可以独立发布,但往往更大。

基于cygwin的程序需要单独的DLL才能运行,这一事实也导致了许可限制。Cygwin运行时库是在GPLv3下授权的,对于具有符合osi的许可证的应用程序有一个链接例外,因此希望围绕Cygwin构建闭源应用程序的开发人员必须从Red Hat获得商业许可证。另一方面,MinGW代码既可以用于开源应用程序,也可以用于闭源应用程序,因为其头文件和库都是经过许可的。

其他回答

其他答案已经击中了目标。我只是想增加一个快速捕捉的例子。

为了补充其他答案,Cygwin附带了MinGW库和头文件,你可以在不链接到cygwin1.dll的情况下使用-mno-cygwin标志与gcc进行编译。比起使用普通的MinGW和MSYS,我更喜欢这个。

维基百科在这里做了一个比较。

来自Cygwin网站:

Cygwin是一个用于Windows的类似linux的环境。它由两部分组成:DLL (cygwin1.dll),作为Linux API模拟层,提供大量的Linux API功能。 提供Linux外观的工具集合。

摘自Mingw网站:

MinGW(“Minimalistic GNU for Windows”)是一个免费提供和可自由分发的Windows特定头文件和导入库的集合,结合了GNU工具集,允许人们生成不依赖任何第三方C运行时dll的本地Windows程序

Cygwin is designed to provide a more-or-less complete POSIX environment for Windows, including an extensive set of tools designed to provide a full-fledged Linux-like platform. In comparison, MinGW and MSYS provide a lightweight, minimalist POSIX-like layer, with only the more essential tools like gcc and bash available. Because of MinGW's more minimalist approach, it does not provide the degree of POSIX API coverage Cygwin offers, and therefore cannot build certain programs which can otherwise be compiled on Cygwin.

就两者生成的代码而言,Cygwin工具链依赖于到大型运行时库cygwin1.dll的动态链接,而MinGW工具链将代码编译为二进制文件,动态链接到Windows原生C库msvcrt.dll,以及静态链接到glibc的某些部分。Cygwin可执行文件因此更紧凑,但需要一个单独的可重新分发的DLL,而MinGW二进制文件可以独立发布,但往往更大。

基于cygwin的程序需要单独的DLL才能运行,这一事实也导致了许可限制。Cygwin运行时库是在GPLv3下授权的,对于具有符合osi的许可证的应用程序有一个链接例外,因此希望围绕Cygwin构建闭源应用程序的开发人员必须从Red Hat获得商业许可证。另一方面,MinGW代码既可以用于开源应用程序,也可以用于闭源应用程序,因为其头文件和库都是经过许可的。

要在非免费/专有/闭源应用程序中使用Cygwin,您需要向Red Hat支付数万美元的“许可证买断”;这会使标准许可条款失效,并付出相当大的代价。谷歌“cygwin许可证成本”,并看到前几个结果。

对于mingw,不产生这种成本,并且许可证(PD、BSD、MIT)是非常允许的。您最多可能需要在应用程序中提供许可细节,例如使用mingw64-tdm时所需的winpthreads许可。

由Izzy Helianthus提供的编辑:商业许可证不再可用,也不再需要,因为Cygwin的winsup子目录中的API库现在是在LGPL下发布的,而不是完全的GPL。