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

Windows Cygwin和MinGW有什么区别? 我想让我的C++项目跨平台,我考虑使用CygWi/MIW。 但是它们之间有什么区别呢,windows,cygwin,mingw,Windows,Cygwin,Mingw,另一个问题是,我是否能够在没有Cygwin/MinGW的系统上运行二进制文件?Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本机Win应用程序)。因此,如果您想使项目跨平台,那么在两者之间的选择是显而易见的,MinGW 虽然您可以考虑在Windows上使用VS,但在Linux / UNICE上使用GCC。大多数开源项目都是这样做的(例如Firefox或Python)。Cygwin使用DLL、Cygwin.DLL(或者一组DLL)在Windows上提供类似POSIX

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

Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本机Win应用程序)。因此,如果您想使项目跨平台,那么在两者之间的选择是显而易见的,MinGW


虽然您可以考虑在Windows上使用VS,但在Linux / UNICE上使用GCC。大多数开源项目都是这样做的(例如Firefox或Python)。

Cygwin使用DLL、Cygwin.DLL(或者一组DLL)在Windows上提供类似POSIX的运行时

MinGW编译为本机Win32应用程序


如果您使用Cygwin构建了一些东西,那么安装它的任何系统都将需要Cygwin DLL。MinGW应用程序不需要任何特殊的运行时。

Wikipedia会进行比较

来自Cygwin的:

  • Cygwin是一个类似Linux的Windows环境。它由两部分组成:一个DLL(cygwin1.DLL),它充当提供大量Linux API功能的Linux API仿真层
  • 提供Linux外观的工具集合
来自Mingw的:

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


Cygwin试图在Windows上创建一个完整的UNIX/POSIX环境。为此,它使用各种DLL。虽然这些DLL包含在GPLv3+中,但它们的许可证包含的内容并不强制派生作品包含在GPLv3+中。MinGW是一个C/C++编译器套件,它允许您创建Windows可执行文件,而不依赖于此类DLL—您只需要正常的MSVC运行时,这是任何正常Microsoft Windows安装的一部分

您还可以获得一个类似UNIX/POSIX的小型环境,该环境使用名为的MinGW进行编译。它几乎没有Cygwin的所有功能,但非常适合希望使用MinGW的程序员。

是一个类似Unix的环境和Microsoft Windows的命令行界面

是GNU编译器集合(GCC)到Microsoft Windows的本机软件端口,以及一组可自由分发的Windows API导入库和头文件。MinGW允许开发人员创建本机Microsoft Windows应用程序


如果所有必需的库(DLL)都存在,则可以在不使用
cygwin
环境的情况下运行使用
mingw
生成的二进制文件。

请注意,实用程序的行为在这两种环境之间确实会有所不同


例如,Cygwin tar可以fork,因为DLL中支持fork(),而mingw版本不能。当试图从源代码编译mysql时,这是一个问题。

不要忽视AT&t的软件,该软件旨在帮助您在windows上编译Unix应用程序(最新版本-2012-08-06;使用Eclipse公共许可证,版本1.0)


像Cygwin一样,他们必须与图书馆竞争;在它们的情况下,
POSIX.DLL
。AT&T的人都是很棒的工程师(和你一起带来了ksh和ksh),他们的东西值得一看。

简单来说,是这样的:

  • 在Cygwin中编译一些东西,您就是在为Cygwin编译它

  • 在MinGW中编译一些东西,您就是在为Windows编译它

关于Cygwin

Cygwin是一个兼容层,通过模拟基于Unix的操作系统提供的许多基本接口,例如管道、Unix样式的文件和目录访问,以及标准中记录的其他接口,可以轻松地将简单的基于Unix的应用程序移植到Windows。如果您有使用这些接口的现有源代码,那么在进行很少的更改甚至不做任何更改之后,就可以将其编译为与Cygwin一起使用,从而大大简化了在Windows上移植简单的基于IO的Unix代码的过程

分发软件时,收件人需要将其与Cygwin运行时环境一起运行(由文件
cygwin1.dll提供)。您可以将其与您的软件一起分发,但您的软件必须遵守其开源许可证。即使只是将您的软件与之链接,但单独分发dll,也会对代码施加许可证限制

关于MinGW

MinGW的目标只是成为GNU Windows开发工具的一个端口。它不试图模拟Unix或提供与Unix的全面兼容性,只是提供了一个可以在Windows中本机使用的GNU编译器集合、GNU Binutils和GNU调试器的版本。它还包括允许在代码中使用Windows本机API的头文件

因此,您的应用程序需要使用Windows API专门针对Windows进行编程,如果它是在标准Unix环境中运行并使用Unix特定功能创建的,则这可能意味着要进行重大更改。默认情况下,在MinGW的GCC中编译的代码将编译为本机Windows X86目标,包括.exe和.dll文件,不过您也可以使用正确的设置进行交叉编译,因为您基本上使用的是GNU编译器工具套件

MinGW是在Windows上使用编译器及其相关链接/生成工具的免费开源替代方案。在某些情况下,使用微软可以在没有太多修改的情况下使用Visual C++编写编译的东西。 尽管MingW包含一些头文件和接口代码,允许您的代码与windowsapi交互,就像普通的标准librar一样
#include <sys/stat.h>
#include <stdlib.h>

int main(void)
{
   struct stat stbuf;
   stat("c:foo.txt", &stbuf);
   system("command");
   printf("Hello, World\n");
   return 0;
}
   MinGW (or MinGW-w64)               Cygwin
   --------------------               ------

   Your program written        Your program written
    for Unix and Linux          for Unix and Linux

             |                           |
             |                           |
             V                           V

    Heavy modifications       Almost no modifications

             |                           |
             |                           |
             V                           V

        Compilation                 Compilation
Program compiled with Cygwin ---> Compatibility layer ---> Windows API

Program compiled with MinGW (or MingGW-w64) -------------> Windows API