小编典典

Cygwin 和 MinGW 有什么区别?

all

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

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


阅读 116

收藏
2022-03-03

共1个答案

小编典典

作为简化,它是这样的:

  • 在 Cygwin 中编译一些东西,你正在 为 Cygwin 编译它。

  • 在 MinGW 中编译一些东西,你正在 为 Windows 编译它。

关于 Cygwin

Cygwin 是一个兼容层,通过模拟基于 Unix 的操作系统提供的许多基本接口,例如管道、Unix 样式的文件和目录访问等,可以轻松地将简单的基于
Unix 的应用程序移植到
Windows。由POSIX标准记录。如果您有使用这些接口的现有源代码,您可以在进行很少甚至没有更改后编译它以与
Cygwin 一起使用,从而大大简化了移植简单的基于 IO 的 Unix 代码以在 Windows 上使用的过程。

当您分发您的软件时,接收者需要将它与 Cygwin
运行时环境(由文件提供cygwin1.dll)一起运行。您可以将其与您的软件一起分发,但您的软件必须遵守其开源许可证。即使只是将您的软件与其链接,但单独分发
dll,仍然可以对您的代码施加许可证限制。

关于明威

MinGW 旨在简单地成为 GNU 的 Windows 开发工具的一个端口。它不尝试模拟或提供与 Unix 的全面兼容性,而是提供可在 Windows
中本地使用的 GNU Compiler Collection、GNU Binutils 和 GNU Debugger 版本。它还包括允许在代码中使用
Windows 原生 API 的头文件。

因此,您的应用程序需要使用 Windows API 专门针对 Windows 进行编程,如果创建它以依赖于在标准 Unix 环境中运行并使用 Unix
特定功能,这可能意味着重大改变。默认情况下,在 MinGW 的 GCC 中编译的代码将编译为本机 Windows X86 目标,包括 .exe 和 .dll
文件,尽管您也可以使用正确的设置进行交叉编译,因为您基本上使用的是 GNU 编译器工具套件。

MinGW 是在 Windows 上使用Microsoft Visual
C++
编译器及其相关链接/制作工具的免费开源替代方案。在某些情况下,可以使用
MinGW 编译旨在使用 Microsoft Visual C++ 编译的内容,而无需进行太多修改。

尽管 MingW 包含一些头文件和接口代码,允许您的代码与 Windows API 交互,但与常规标准库一样,这不会对您创建的软件施加许可限制。

其他注意事项

对于任何重要的软件应用程序,例如使用图形界面、多媒体或访问系统上的设备的应用程序,您离开了 Cygwin
可以为您做的事情的界限,需要进一步的工作来使您的代码跨平台。但是,可以通过使用跨平台工具包或框架来简化此任务,这些工具包或框架允许编码一次并为任何平台成功编译您的代码。如果您从一开始就使用这样的框架,您不仅可以减少移植到另一个平台时的麻烦,而且您可以在所有平台上使用相同的图形小部件——窗口、菜单和控件——如果你正在编写一个GUI
应用程序,并让它们对用户来说是原生的。

例如,开源Qt
框架
是一个流行且全面的跨平台开发框架,允许构建跨操作系统(包括
Windows)工作的图形应用程序。还有其他这样的框架。除了大型框架之外,还有数千个更专业的软件库支持多个平台,让您不必担心为不同平台编写不同的代码。

当您从一开始就开发跨平台软件时,通常没有任何理由使用 Cygwin。在 Windows 上编译时,您通常的目标是使您的代码能够使用 MingW 或
Microsoft Visual C/C++ 进行编译,或两者兼而有之。在 Linux/*nix 上编译时,您通常会直接使用 GNU
编译器和工具对其进行编译。

2022-03-03