我想让我的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程序

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

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

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

请注意,两者之间的效用行为确实不同。

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

阅读这些已回答的问题,了解Cygwin和MinGW之间的区别。


问题#1:我想创建一个应用程序,我写源代码一次,编译一次,并在任何平台上运行(例如Windows, Linux和Mac OS X…)

答案#1:把源代码写进去 JAVA。编译源代码一次,然后 在任何地方运行它。


问题2:我想创建一个应用程序,我只写一次源代码,但我可以分别为任何平台编译源代码(例如Windows, Linux和Mac OS X…)

答案#2:用C语言编写源代码 或c++。使用标准头文件 只有。使用合适的编译器 平台(如Visual Studio for Windows, GCC for Linux, XCode for Mac)。注意,您不应该使用任何一种 高级编程特性 全部编译源代码 成功的平台。如果你使用 没有C或c++标准类或 函数,你的源代码没有 在其他平台编译。


问题#3:回答问题#2,在每个平台上使用不同的编译器是困难的,有跨平台的编译器吗?

答案#3:是的,使用GCC编译器。它 是一个跨平台编译器。来 在Windows中编译源代码 使用MinGW提供GCC编译器 并编译您的源代码 代码转换为本地Windows程序。不 使用任何高级编程特性 (如Windows API)来编译你的 所有平台的源代码 成功。如果你使用Windows API 函数,你的源代码没有 在其他平台编译。


问题4:C或c++标准头文件不提供任何高级编程特性,如多线程。我该怎么办?

Answer #4: You should use POSIX (Portable Operating System Interface [for UNIX]) standard. It provides many advanced programming features and tools. Many operating systems fully or partly POSIX compatible (like Mac OS X, Solaris, BSD/OS and ...). Some operating systems while not officially certified as POSIX compatible, conform in large part (like Linux, FreeBSD, OpenSolaris and ...). Cygwin provides a largely POSIX-compliant development and run-time environment for Microsoft Windows.


因此:

要在Windows下充分利用GCC跨平台编译器的优势,请使用MinGW。

要在Windows中使用POSIX标准高级编程特性和工具的优势,请使用Cygwin。

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

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