为了账号安全,请及时绑定邮箱和手机立即绑定

Cygwin和MinGW有什么区别?

Cygwin和MinGW有什么区别?

胡说叔叔 2019-09-27 16:22:20
我想使我的C ++项目跨平台,并且正在考虑使用Cygwin / MinGW。但是它们之间有什么区别?另一个问题是,是否可以在没有Cygwin / MinGW的系统上运行二进制文件?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

为简化起见,它是这样的:

  • 在Cygwin中编译某些内容,您正在为Cygwin进行编译。

  • 在MinGW中编译某些内容,您正在针对Windows进行编译。

关于西格温

Cygwin的目的是通过模拟POSIX标准记录的基于Unix的操作系统提供的许多小细节,使基于Unix的应用程序到Windows的移植更加容易。您的应用程序可以使用Unix功能,例如管道,Unix风格的文件和目录访问等,并且可以使用Cygwin进行编译,它将作为您应用程序周围的兼容层,因此许多特定于Unix的范例可以继续使用。

分发软件时,收件人将需要与Cygwin运行时环境(由file提供cygwin1.dll)一起运行。您可以将其与软件一起分发,但是您的软件必须符合其开放源代码许可。甚至可能甚至只是链接您的软件,但单独分发dll仍可能需要您遵守开放源代码许可证。

关于MinGW

MinGW的目标只是成为GNU编译器工具(例如GCC,Make,Bash等)的Windows端口。它不尝试模拟Unix或提供与Unix的全面兼容性,而是提供了在Windows上使用GCC(GNU编译器)和少量其他工具的最低必需环境。它没有像Cygwin这样的Unix仿真层,但是结果是需要对您的应用程序进行特定的编程,使其能够在Windows上运行,这可能意味着要进行重大更改,如果它被创建为依赖于在标准Unix环境中运行,并且使用Unix特定的功能,例如前面提到的功能。默认情况下,在MinGW的GCC中编译的代码将编译为Windows X86本机目标,包括.exe和.dll文件,尽管您也可以使用正确的设置进行交叉编译,因为您基本上是在使用GNU编译器工具套件。

MinGW本质上是Microsoft Visual C ++编译器及其关联的链接/生成工具的替代方案。在某些情况下,可能会使用MinGW使用正确的库来编译旨在用于Microsoft Visual C ++编译的内容,在某些情况下可能会进行其他修改。

MinGW包括一些用于与Windows操作系统进行交互的基本标准库,但是与GNU编译器集合中包含的普通标准库一样,这些不对您创建的软件施加许可限制。

对于非平凡的软件应用程序,除非使用全面的跨平台框架,否则使其成为跨平台的应用可能是一个巨大的挑战。在我撰写本文时,Qt框架是为此目的最受欢迎的框架之一,它允许构建可在包括Windows在内的各种操作系统上运行的图形应用程序,但是还有其他选择。如果从一开始就使用这样的框架,则不仅可以减轻移植到另一个平台时的麻烦,而且如果您正在编写一个框架,则可以在所有平台上使用相同的图形小部件-窗口,菜单和控件。 GUI应用程序,并使它们对用户而言是本机的。


查看完整回答
反对 回复 2019-09-27
?
达令说

TA贡献1821条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 1107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信