Cygwin和MinGW有什么区别?

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

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


Cygwin试图在Windows上创建一个完整的UNIX / POSIX环境。 要做到这一点,它使用各种DLL。 虽然这些DLL被GPLv3 +覆盖,但其许可证包含一个异常,不会强制派生的工作被GPLv3 +覆盖。 MinGW是一个C / C ++编译器套件,它允许您创建Windows可执行文件而不依赖于此类DLL - 您只需要普通的MSVC运行时,它们是任何常规Microsoft Windows安装的一部分。

你也可以得到一个小的UNIX / POSIX环境,用MinGW编译成MSYS。 它没有Cygwin所有功能附近的地方,但是对于希望使用MinGW的程序员来说是理想选择。


作为一种简化,就像这样:

  • 在Cygwin编译一些东西,然后编译Cygwin。

  • 用MinGW编译一些东西,然后编译Windows。

  • 关于Cygwin

    Cygwin的目的是通过模拟许多基于Unix的操作系统提供的小细节,并通过POSIX标准记录,使得基于nix的应用程序更容易移植到Windows。 如果您的应用程序假定它可以使用Unix功能,如管道,Unix风格的文件和目录访问等等,那么您可以在Cygwin中编译它,并且Cygwin本身将作为应用程序周围的兼容层,因此许多这些特定于Unix的范例可以继续使用,对应用程序进行很少修改或不需要修改。

    如果您想为Cygwin编译某些内容并分发该结果应用程序,则还必须将Cygwin运行时环境(由cygwin1.dll提供)与它一起cygwin1.dll ,这会影响您可能使用哪些类型的软件许可证。

    关于MinGW

    MinGW是GNU编译器工具的Windows端口,例如GCC,Make,Bash等。 它不会尝试模拟或提供与Unix的全面兼容性,而是它提供了在Windows上使用GCC(GNU编译器)和少量其他工具的最低必要环境。 它没有像Cygwin这样的Unix仿真层,但结果是你的应用程序需要专门编程才能在Windows中运行,这可能意味着如果它被创建为依赖于在标准Unix环境中运行并且使用特定于Unix的功能,如前面提到的功能。 默认情况下,在MinGW的GCC中编译的代码将编译为本机Windows X86目标,包括.exe和.dll文件,但您也可以使用正确的设置进行交叉编译。 MinGW是Microsoft Visual C ++编译器及其关联链接/制作工具的开源替代品。

    存在相当复杂的跨平台框架,这使得将应用轻松移植到各种操作系统的任务变得容易 - 例如Qt框架是跨平台应用的流行框架。 如果您从一开始就使用这样的框架,那么当您需要移植到另一个平台时,不仅可以减少您的麻烦,而且您可以在所有平台上使用相同的图形窗口小部件(窗口,菜单和控件) GUI应用程序。


    为了增加其他答案,Cygwin附带了MinGW库和头文件,您可以通过使用带有gcc的-mno-cygwin标志来编译,而无需链接到cygwin1.dll。 我非常喜欢使用普通的MinGW和MSYS。

    链接地址: http://www.djcxy.com/p/41883.html

    上一篇: What is the difference between Cygwin and MinGW?

    下一篇: How to know that an app is going to be uninstalled in android?