gpt4 book ai didi

windows - Cygwin 和 MinGW 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 11:50:43 25 4
gpt4 key购买 nike

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

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

最佳答案

作为简化,它是这样的:

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

  • 关于 Cygwin
    Cygwin 是一个兼容层,通过模拟基于 Unix 的操作系统提供的许多基本接口(interface),例如管道、Unix 样式的文件和目录访问等,可以轻松地将简单的基于 Unix 的应用程序移植到 Windows由 POSIX 记录标准。如果您有使用这些接口(interface)的现有源代码,您可以在进行很少甚至不做任何更改后将其编译为与 Cygwin 一起使用,从而大大简化了移植简单的基于 IO 的 Unix 代码以在 Windows 上使用的过程。
    当您分发软件时,接收者需要将它与 Cygwin 运行时环境(由文件 cygwin1.dll 提供)一起运行。您可以将其与您的软件一起分发,但您的软件必须遵守其开源许可证。即使只是将您的软件与其链接,但单独分发 dll,仍然可以对您的代码施加许可限制。
    关于明威
    MinGW 旨在简单地成为 GNU 的 Windows 开发工具的一个端口。它不尝试模拟或提供与 Unix 的全面兼容性,而是提供可在 Windows 中本地使用的 GNU 编译器集合、GNU Binutils 和 GNU 调试器版本。它还包括允许在您的代码中使用 Windows 的 native API 的头文件。
    因此,您的应用程序需要专门针对 Windows 进行编程,使用 Windows API,如果它被创建为依赖于在标准 Unix 环境中运行并使用 Unix 特定功能,则这可能意味着重大更改。默认情况下,在 MinGW 的 GCC 中编译的代码将编译为本地 Windows X86 目标,包括 .exe 和 .dll 文件,但您也可以使用正确的设置进行交叉编译,因为您基本上使用的是 GNU 编译器工具套件。
    MinGW 是使用 Microsoft Visual C++ 的免费开源替代方案。 Windows 上的编译器及其相关的链接/制作工具。在某些情况下,可能可以使用 MinGW 编译一些旨在使用 Microsoft Visual C++ 编译的内容,而无需进行太多修改。
    尽管 MingW 包含一些头文件和接口(interface)代码,允许您的代码与 Windows API 交互,但与常规标准库一样,这不会对您创建的软件施加许可限制。
    其他注意事项
    对于任何非平凡的软件应用程序,例如使用图形界面、多媒体或访问系统上的设备的应用程序,您都没有限制 Cygwin 可以为您做的事情,并且需要进一步的工作来使您的代码跨平台。但是,可以通过使用跨平台工具包或框架来简化此任务,这些工具包或框架允许一次编码并让您的代码针对任何平台成功编译。如果您从一开始就使用这样的框架,那么您不仅可以减少移植到另一个平台时的麻烦,而且您可以在所有平台上使用相同的图形小部件 - 窗口、菜单和控件 - 如果您正在编写一个GUI 应用程序,并让它们对用户来说是原生的。
    例如,开源 Qt framework是一个流行且全面的跨平台开发框架,允许构建跨操作系统(包括 Windows)工作的图形应用程序。还有其他这样的框架。除了大型框架之外,还有数千个更专业的软件库支持多个平台,让您不必担心为不同平台编写不同的代码。
    当您从一开始就开发跨平台软件时,您通常没有任何理由使用 Cygwin。在 Windows 上编译时,您的目标通常是使您的代码能够使用 MingW 或 Microsoft Visual C/C++ 或两者进行编译。在 Linux/*nix 上编译时,您通常会直接使用 GNU 编译器和工具对其进行编译。

    关于windows - Cygwin 和 MinGW 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771756/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com