我想让我的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使用一个DLL, Cygwin . DLL,(或者可能是一组DLL)在Windows上提供类似posix的运行时。

MinGW编译为本地Win32应用程序。

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

Cygwin试图在Windows上创建一个完整的UNIX/POSIX环境。为此,它使用了各种dll。虽然这些dll由GPLv3+覆盖,但它们的许可包含一个异常,该异常不强制派生作品由GPLv3+覆盖。MinGW是一个C/ c++编译器套件,它允许你创建Windows可执行文件而不依赖于这些dll -你只需要正常的MSVC运行时,这是任何正常的微软Windows安装的一部分。

您还可以获得一个类似UNIX/POSIX的小型环境,使用MinGW编译,称为MSYS。它不具备Cygwin的所有功能,但对于想要使用MinGW的程序员来说是理想的。

Cygwin使用兼容层,而MinGW是本地的。这是主要的区别之一。

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

   MinGW (or MinGW-w64)               Cygwin
   --------------------               ------

   Your program written        Your program written
  for Unix and GNU/Linux      for Unix and GNU/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