【操作系统】Cygwin和MinGW的区别与联系是怎样的?

news2025/1/21 20:26:12

Cygwin和MinGW的区别与联系是怎样的?

  • Cygwin
  • MinGW
  • 两者的区别和联系
  • 参考资料

Cygwin和MinGW都是为Windows系统开发者设计的工具。

Cygwin

Cygwin, 原Cygnus出品,目前是RedHat名下的项目。项目的目的是提供运行于Windows平台的类Unix环境(以GNU工具为代表),为了达到这个目的,Cygwin提供了一层抽象层dll,用于将部分Posix调用转换成Windows的API调用,实现相关功能。其中最典型的,最基本的模拟层就是那个cygwin1.dll。除此之外,随着Linux系统的发展,目前Cygwin已经不仅仅提供POSIX兼容,因此也顺带多了更多模拟层的依赖关系。
CygwinCygwin的目录结构基本照搬了Linux的样子,同时也兼容了Windows的许多功能:大部分应用使用Unix风格的路径,Windows的盘符通过类似挂载点的方式提供给Cygwin使用。Cygwin中既可以运行Cygwin的应用(依赖模拟层),又可以运行Windows应用,而传递给应用的路径会经过它的模拟层变换,以此保证程序运行不会出错。事实上,Cygwin诞生支出,本就是想通过GCC编译出Windows应用来。

总之,Cygwin是运行于Windows平台的POSIX子系统,提供Windows下的类Unix环境,并提供将部分Linux应用移植到Windows平台的开发环境的一套软件。即Cygwin是一个开放源码项目,旨在提供类Unix环境在Windows上的实现,使用户能够在Windows系统上使用类似于Linux/Unix的软件和工具。它提供了一个兼容层,允许在Windows上编译和运行POSIX应用程序

MinGW

MinGW是“Minimalist GNU for Windows”的缩写,是一个在Windows上构建GNU工具链的项目。MinGW提供一组开发工具,包括编译器和相关工具,允许在Windows上构建本地Windows应用程序,同时尽可能地减少对POSIX层的依赖。
MinGW
它主要提供了针对win32应用的GCC,GNU binutils等工具,以及对等于Windows SDK(的子集)的头文件和用于MinGW版本linker的库文件(so,a等,而不是VC的lib)。

MinGW能够替代cl用于编译不包含MFC的,以WinSDK为主的Windows应用,并且编译出来的应用不依赖于第三方的模拟层支持,其运行时为大部分Windows标配的msvcrt(故称原生Windows应用)。除此之外,MinGW也支持GCC支持的其他语言。

简而言之,MinGW是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。实际上 MinGW 并不是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具 (比如 gawk bison 等等)。开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。

两者的区别和联系

两者的主要区别在于目标和工作方式。Cygwin旨在提供与Unix兼容的开发环境,包括POSIX兼容性,并提供Linux风格的工具。MinGW专注于提供Windows上开发本地Windows应用程序所需的GNU工具,同时尽可能减少对POSIX接口的依赖。

MinGW一开始是分为两个部分的w32api和mingwrt,前者提供win32的系统头文件和系统dll的导出库,而后者提供c运行库msvcrt的导出库顺带添加了部分msvcrt没有的函数,用于支持gcc等工具链的构建;
Cygwin是在win32的基础上模拟了POSIX的接口,前文提到的w32api这个包cygwin也会用到,所以它们的区别仅仅在于MinGW只提供win32的函数导出,而Cygwin在前者的基础上有模拟了POSIX接口,而且MinGW只包括编译器和库,Cygwin提供了一个完整的类UNIX运行时环境。它们的联系从前面也能看出Cygwin包括了除msvcrt库之外的整个MinGW,Cygwin使用了newlib提供c运行时。再补充一点,新版的cygwin1.dll这个库是使用MinGW-w64工具编译的,所以说它们的关系是剪不断理还乱,只用注意Cygwin提供posix接口MinGW不提供posix接口就好了

然而,两者都允许在Windows上使用GNU工具和编译器。有时候它们可能结合使用,例如使用MinGW提供的编译器,同时使用Cygwin提供的POSIX兼容性。

参考资料

  1. https://www.zhihu.com/question/22137175
  2. Cygwin是什么
  3. MinGW到底是个什么

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux - 浅析守护进程的概念

Linux下的守护进程是在后台运行的特殊进程,它不与任何终端关联,通常在系统启动时自动启动,运行在后台并且不受用户登录或注销的影响。Linux 下的守护进程通常是以系统管理员的权限运行,用来执行一些系统任务,例如监控硬…

MATLAB R2023b(编程和数学计算软件)

MATLAB R2023b是一款最新版本的编程和数学计算软件,它包含了大量用于算法开发、数据可视化、数据分析、数据模拟以及交互式环境的功能,使得用户能够更加方便灵活地进行科学研究或者工程应用。 MATLAB R2023b相较于之前的版本,增加了一些新的…

同城售后系统退款业务重构心得 | 京东云技术团队

一、重构背景 1.1、退款 到家、小时购、天选退款有2套结构,代码逻辑混乱; 其中小时购、天选部分售后单是和平生pop交互退款,部分是和售后中台交互退款;并且兼容3套逻辑; 痛点:代码繁重,缺乏…

猫头虎博主:Python数据分析,你掌握了吗?

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

自动驾驶的同学看过来:DriveLM:世界首个语言+自动驾驶全栈开源数据集

DriveLM:世界首个语言自动驾驶全栈开源数据集,旨在借助大语言模型和海量自然语言数据集,构筑复杂场景下安全、精准、可解释的自动驾驶系统,突破现有自动驾驶推理能力上限,数据集已开源! DriveLM提供了量化…

多叉树OJ思路 ,无代码

也是第一次写森林树,确实不是很拿捏,受二叉树的影响太多了;你会发现这个多叉树一般不建链式结构的,都是数组式的比如“双亲表示法”,让子节点可以找到父节点这样。 有疑问欢迎交流,作者我也是蒟蒻&#xff…

精进·第2篇:分享一个3-5年战略规划框架思路

首发:麦子禾咨询 作者:石头 前几天,石头分享过一个简单的战略规划框架思路,本篇,石头打算再分享一个相对复杂的3-5年战略规划框架思路。 每种战略规划框架思路,都有其局限性,有些受限于行业属…

MySQL 外连接和内连接的查询优化怎么做?

目录 1. 表连接方式的分类和需要注意的细节 2. 表连接时底层做了什么事? 3. 左外连接优化方案 4. 内连接优化方案 1. 表连接方式的分类和需要注意的细节 多表连接查询,大体上可以分为内连接与外连接。 内连接的意思就是把两个表有关联的部分都取出…

二叉树进阶 - (C++二叉搜索树的实现)

二叉树进阶 - (二叉搜索树的实现) 二叉搜索树1. 二叉搜索树概念2. 二叉搜索树操作2.1 二叉搜索树的查找2.2 二叉搜索树的插入2.3 二叉搜索树的删除(重点) 3. 二叉搜索树的(代码)实现 二叉搜索树 1. 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0…

MySQL是如何优化in子查询的?

目录 前言 一、普通in子查询 二、物化表 三、SQL优化 四、IN语句的优化方式 1. 使用子查询代替IN查询 2. 使用JOIN代替IN查询 3. 使用EXISTS代替IN查询 4. 使用索引优化IN查询 5. 优化查询语句 总结 前言 对于很多的开发小伙伴来说,在MySQL中进行in子查…

Antlr4学习笔记

目录 背景 相关概念 流程说明 入门示例 简易计算器 环境准备 开发 java8方法提取 语法规则 常用的语法要点 设计语法 序列模式 选择模式 词法符号依赖 嵌套模式 总结 参考资料 背景 在阅读shardingjdbc-4.1.1代码时,发现一段sql解析的逻辑&#x…

极智开发 | H100服务器的庐山真面目

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 H100服务器的庐山真面目。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq H100 是英伟达最强显卡,当然其实也…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路,还是从比较好的图片或者是civitai上找一些热门的prompt,从小红书上也找到了不少的prompt,lexica.art上也有不少,主要是为了电商场景的一些测评: 小红书、civitai、Lexica、Liblib.ai、 depth o…

基于GEE云平台一种快速修复Landsat影像条带色差的方法

这是之前关于去除遥感影像条带的另一篇文章,因为出版商推迟了一年发布,所以让大家久等了。这篇文章的主要目的是对Landsat系列卫星因为条带拼接或者镶嵌产生的条带来进行的一种在线修复方式。 原文连接 一种快速修复Landsat影像条带色差的方法 题目&a…

app开发之后需要做什么

在完成app的开发之后,还有一系列的工作需要进行,以确保app的顺利上线和用户的良好体验。下面将从原理和详细介绍两个方面来介绍app开发之后需要做的工作。 一、原理介绍 1. 测试与调试:在app开发完成后,需要进行全面的测试与调试…

防范欺诈GPT

去年,ChatGPT的发布让全世界都感到惊讶和震惊。 突然间出现了一个平台,它比之前的任何其他技术都更深入地了解互联网。人工智能可以被训练成像阿姆一样说唱,以世界著名诗人的风格写作,并精确地翻译内容,以至于它似乎能…

初识Vue 解决vue在启动时生成的提示

让我为大家简单介绍一下吧&#xff01; Vue是一套用于构建用户界面的渐进式javaScript框架 当我们引入vue.js后 <script src"../js/vue.js"></script>我们发现&#xff0c;当我们打开网页时&#xff0c;控制台会出现以下内容 那我们该怎么解决呢&…

思科网络基础

目录 一、特殊的ip地址 1.一些基本概念 2.私有地址 3.子网划分 4.VLSM&#xff08;可变长子网掩码&#xff09; 5.CIDR&#xff08;无类域间路由-超网&#xff09; 二、IP头和一些基本概念 1.ip头 2.mtu 3.免费arp 一、特殊的ip地址 1.一些基本概念 网络位不变&…

卡尔曼家族从零解剖-(04)贝叶斯滤波→细节讨论,逻辑梳理

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…

玩转AIGC:如何选择最佳的Prompt提示词?

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…