MinGW与Cygwin的一些杂谈

引用:http://www.cnblogs.com/fancybit/archive/2012/07/08/2581590.html

首先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和CgyWin这两个toolchain,由于之前没研究过c(只用来应付过考试),所以这么经典的工具都不知道。

MinGW是Minimalistic GNU for Windows的缩写,是gcc的windows实现,也就是一个编译器;可以在windows下写unix like的代码,即调用fork(),pthread()等unix类库,MinGW会把这些调用编译成对应的windows kernel32 调用,执行的时候不依赖MinGW,效率也比较高。一般大型程序需要MSYS辅助。

CygWin像一个平台,是让windows拥有unix like环境的软件,gcc是安装在GygWin的编译器;CygWini的gcc环境和Unix的gcc环境可以划等号;编译一个大型程序,光靠一个GCC是不够的,还需要有Autoconf等工具来配置项目,CygWin就提供了这些工具。但是GygWin编译出来的程序要加入cygwin1.dll才能跑,cygwin1.dll把unix-like的函数调用转化成等价的windows调用,当然也可以通过 -mno-cygwin来依赖MinGW,就不用cygwin1.dll了。

时间: 2024-10-14 10:58:56

MinGW与Cygwin的一些杂谈的相关文章

mingw和cygwin区别

minGW与cygwin ========================== 首先MingW和cygwin都可以用来跨平台开发. MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的 精简的GCC . MinGW 收集了一系列免费的Windows 使用的头文件和库文件:同时整合了GNU( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等. Microsoft的有一套unix的子系统的开发

mingW与cygwin

转自:http://hi.baidu.com/ooxxer/item/d25dccc072846a50ac00ef7e# 首先MingW和cygwin都可以用来跨平台开发.  MinGW是Minimalistic GNU for Windows的缩写,也就是Win版的GCC.  Cygwin则是全面模拟了Linux的接口,提供给运行在它上面的的程序使用,并提供了大量现成的软件,更像是一个平台.  相对的MingW也有一个叫MSys(Minimal SYStem)的子项目,主要是提供了一个模拟Li

MinGW and Cygwin – An Introduction and Differences

If you are using Linux and your are a big fan of shell and its other utilities like grep, ls, make and its compilers gcc and g++, and if you want these utils on Windows platform, then this articles is for you. Even if you are not a developer, but sti

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

目录 0. 引言 1. 交叉编译 2. Cygwin简介 3. 静态库编译及使用 4. 动态库编译及使用 5. MinGW简介 6. CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统.为什么linux和unix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近.同时,POSI

Msys/MinGW与Cygwin/gcc

本文转自:http://www.lupaworld.com/273398/viewspace-122539.html 一. MinGW MinGW 官方网站为 http://www.mingw.org/ MinGW,即 Minimalist GNU For Windows(GCC compiler suite).它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序. MinGW: 一个可自由使用和自由

Cygwin、Msys、MinGW、Msys2的区别与联系(转)

声明:本文章转自知乎,如有侵犯,请告知删除. 作者:LiTuX链接:https://www.zhihu.com/question/22137175/answer/90908473来源:知乎 网上有很多文章讲它们之间的区别与联系,初学者看的一头雾水,在知乎上看到这篇文章讲的很清楚,容易理解. 在讲区别联系之前,我们先看一下这几个东东的前世今生. Cygwin,原 Cygnus 出品(已被红帽收购),目前是 RedHat 名下的项目.项目的目的是提供运行于 Windows 平台的类 Unix 环境(

cygwin和mingw的区别

之前由于做一些JNI的开发,安装了MinGW,最近有个项目需要用到cygwin,于是就有个疑问,这两个东西有什么区别?在网上看了些资料,在这里复制粘贴一下,以备后查. Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix 和win32的API都是符合标准C,也就是说,大多数函数调用在unix和win32下是相同的.但是,unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不

Cygwin 与 MinGW/MSYS/MSYS2,如何选择?

本文链接:http://zengrong.net/post/1557.htm 什么是Cygwin和MinGW?请看这篇:Msys/MinGW与Cygwin/gcc. 在无法完全转换到Linux系统的前提下,我一直在 Cygwin 下工作,使用全套的Linux移植工具,学习Bash编程. 但Cygwin由于工作在模拟模式下,速度较慢,相比而言, MinGW 就要快不少. 下面是我选择的对比: 特点 Cygwin MinGW/MSYS MSYS2 是否GNU 否 是 是 更多软件支持? 支持绝大多数

Cygwin与minGW

这几天关注了一下它们, 其实我是不想安装一下vs来编写一些小东西. 本来想写个小exe,于是跑到vs的bin下面把cl与link搞出来,却发现cl还要配置什么的,也不太清楚直接就二个exe与部分dll能否使用.折腾二下, link可以使用,cl却不能使用.也没见谁这么弄过,于是放弃了. 再找window编译win32 c时,发现有gcc,找到minGW,与Cygwin,折腾比较了好大一会,才发现. mingGW最大区别就是把那些bin编译成cmd下可以独立运行的, 而Cygwin,基本上是cmd