首先MingW和cygwin都可以用来跨平台开发。  
MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的GCC。  
Cygwin则是全面模拟了Linux的接口,提供给运行在它上面的的程序使用,并提供了大量现成的软件,更像是一个平台。  
相对的MingW也有一个叫MSys(Minimal SYStem)的子项目,主要是提供了一个模拟Linux的Shell和一些基本的Linux工具。因为编译一个大型程序,光靠一个GCC是不够的,还需要有Autoconf等工具来配置项目,所以一般在Windows下编译ffmpeg等Linux下的大型项目都是通过Msys来完成的,当然Msys只是一个辅助环境,根本的工作还是MingW来做的。

用MingW和cygwin编译出来的程序的区别。  
首先MingW和cygwin都不能让Linux下的程序直接运行在Windows上,必需通过源代码重新编译。  
现代操作系统包括Windows和Linux的基本设计概念像进程线程地址空间虚拟内存这些都是大同小异的,之所以二者上的程序不能兼容,主要是它们对这些功能具体实现上的差异,首先是可执行文件的格式,Window使用PE的格式,并且要求以.EXE为后缀名。Linux则使用Elf。其次操作系统的API也不一样,如Windows用CreateProcess()创建进程,而Linux使用fork()。  
所以要移植程序必然要在这些地方进行改变,MingW有专门的W32api头文件,来把代码中Linux方式的系统调用替换为对应的Windows方式。而Cygwin则通过cygwin1.dll这个文件来实现这种API的转换,并模拟一个Linux系统调用接口给程序,程序依然以Linux的方式调用系统API,只不过这个API在cygwin1.dll上,cygwin1.dll再调用Windows对应的实现,来把结果返回给程序。  
可以用查看他们编译好的程序的导入表来验证这点。  
二者生成的程序都是能在Windows上运行的EXE文件,显然都是PE格式,用一个PE格式查看工具检查一下就能发现,Cygwin生成的程序依然有fork()这样的Linux系统调用,但目标库是cygwin1。而MingW生成的程序,则全部使用从KERNEL32导出的标准Windows系统API。  
这样看来用Mingw编译的程序性能会高一点,而且也不用带着那个接近两兆的cygwin1.dll文件。  
但Cygwin对Linux的模拟比较完整,甚至有一个Cygwin X的项目,可以直接用Cygwin跑X。  
另外Cygwin可以设置-mno-cygwin的flag,来使用Mingw编译。  
而与Cygwin更有可比性的MSys上的工具也是通过Cygwin这种模拟的方式来提供的。  
总之这两个项目有千丝万缕的关系,一个不恰当的比方,如果Mingw是MFC,Cygwin就是.NET了。

=====================

1.修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式--这就是mingw的做法. 
2.修改库,让window提供一个类似unix提供的库,他们对程序的接口如同unix一样,而这些库,当然是由win32的API实现的--这就是cygwin的做法.

mingW与cygwin 异同相关推荐

  1. windows下的linux开发环境Mingw与Cygwin

    minGW给那些习惯于在Linux上开发的人员,在windows上提供了一套类似的工具集. cygwin主要是对于再Linux的程序,无需改动代码即可移植到windows上. gnuwin32主要是对 ...

  2. MinGw 和 cygwin 的区别和联系 (跨平台 windows运行linux程序)

    1. windows与Linux操作系统的不同 windows和Linux是目前来说最流行的两大操作系统,在基本设计概念上,进程.线程.寻址.内存管理等方面都是大同小异的,但是二者之间的程序不兼容,因 ...

  3. mingW与cygwin

    首先MingW和cygwin都可以用来跨平台开发.   MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的GCC.   Cygwin则是全面模拟了Linux的 ...

  4. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...

  5. MinGw 和 cygwin 的区别和联系

    原创 by zoe.zhang .......................................................... 1. windows与Linux操作系统的不同 w ...

  6. 码农的自我修养 - 关于MinGW和Cygwin

    Windows下使用GCC套件,并且模拟Unix/Linux的操作环境,一般使用的是MinGW和Cygwin. 让我们来一起认识一下. MinGW Minimalist GNU for Windows ...

  7. 基于window+Clion的CMake、MinGW与Cygwin配置指南

    1. 背景介绍 Clion是捷克公司JetBrains出品的JB全家桶之中主要面向C.C++的集成开发环境.以前主要是基于Linux做软件无线电的开发.最近需要经常上网写文档,Linux实在不方便,想 ...

  8. mingw ,cygwin,msys,mingw-w64,msys2区别一句话总结。

    最近用notepad++组建简单的windows下编译器环境,点击打开链接 发现了windows下好多题目中的名词.总结下他们的区别吧. mingw,主要是用linux的gnu工具,如gcc,gdb开 ...

  9. MinGW VS CygWin

    Programming Erlang翻的差不多了,按照之前赖赖我们的约定,看完书之后要搞一个聊天程序来练练手.但是鉴于Erlang的GUI比较丑,决定用C来实现界面,erlang和c通过interfa ...

最新文章

  1. Flutter——设置appBar的高度
  2. 5G NPN 行业专网 — 媒体行业 5G 专网部署方案
  3. layui select 赋值_layui给下拉框及日期组件赋值
  4. Find the AFei Numbers
  5. 数据结构Java08【二叉平衡树(AVL)-概述、单旋转、双旋转】
  6. tomcat站点配置
  7. [Spring5]IOC容器_Bean管理XML方式_创建对象_set注入属性and有参构造注入属性
  8. javac命令不好用的解决方法
  9. 处理血压信号_测血压检测健康,8款高品质血压计推荐
  10. LeetCode:螺旋矩阵【54】
  11. Java开发入门与实战!打印杨辉三角java代码
  12. [function.strtotime] 错误对策
  13. qt 限制一段时间内对button只能点按一次_299元入手拓牛智能垃圾桶,用第一次想退货,第三天我上瘾了...
  14. Ping++中的AlipaySDK和AlicloudUTDID冲突解决方案
  15. Linux的Vi命令详解
  16. java rce漏洞原理_JXBrowser JavaScript-Java bridge 中的RCE漏洞
  17. 金格HTML签章集成
  18. 三阶科赫雪花PYTHON
  19. 一个非常强大的视频、音频、二维码、图片、压缩等在线网址
  20. 关于用Unity实现校区AR导航毕业设计的建议

热门文章

  1. 【转】云服务器cvm 云服务器ecs区别
  2. 【转】SharePoint Content Database简介
  3. android 微信两个服务的,微信上线两个新功能
  4. stick和stuck的区别_怎样区别“stick to”、“stick with”和“stick by”这三个表达?...
  5. 【软技能】代码先放一放,学习一下工程的概念
  6. Navicat15安装笔记
  7. *【CodeForces - 122C 】Lucky Sum (bfs记录状态,二分查找,有坑)(或分块)
  8. Apollo进阶课程 ③ | 开源模块讲解(中)
  9. html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div
  10. centos7卸载mysql数据库,CentOS7 安装卸载MySQL