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

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


当前回答

   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

其他回答

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

来自Cygwin网站:

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

摘自Mingw网站:

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

   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

Cygwin使用一个DLL, Cygwin . DLL,(或者可能是一组DLL)在Windows上提供类似posix的运行时。

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

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

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

Cygwin模拟整个POSIX环境,而MinGW是仅用于编译的最小工具集(编译本地Win应用程序)。所以,如果你想让你的项目跨平台,MinGW显然是两个选择之一。

尽管你可能会考虑在Windows上使用VS,在Linux/ unix上使用GCC。大多数开源项目都这样做(例如Firefox或Python)。