原创 by zoe.zhang

..........................................................

1. windows与Linux操作系统的不同

    windows和Linux是目前来说最流行的两大操作系统,在基本设计概念上,进程、线程、寻址、内存管理等方面都是大同小异的,但是二者之间的程序不兼容,因为二者在系统功能上是不同的,提供的系统API也是不同的。
  从最明显的几点来说:

  • 可执行文件的格式,Windows采用的是PE的格式,要求以.exe为后缀名,而Linux使用的是 elf 的格式;
  • 操作系统提供的系统API是不同的,如Windows使用CreateProcess()创建进程,而Linux使用fork()
    所以想要在Windows环境下使用Linux的编译工具,也就是gcc/g++,我们需要一个中间的转换工具或者平台,这也就是MinGW和cygwin存在的原因。

2. 什么是 MinGW

  • MinGw全称 Minimalistic GNU for Windows,某种程度上可以看做是win版本下的GCC。Mingw有一个Msys的子项目,可以提供一些模拟Linux的shell和基本的Linux工具,Msys是一个辅助环境。
  • MinGw 有专门的Win32 API的头文件,来把代码中Linux方式的系统调用替换为对应的Windows下的调用方式,某种程度上可以称之为将Linux调用 翻译为 Windows调用。

3. 什么是 cygwin

  • Cygwin 则是一个在Windows平台上运行的unix模拟环境,是cygnus solutions 公司开发的自由软件。Cygwin更像一个平台,模拟了Linux的接口,提供了运行在它上面的程序使用,提供了很多Linux环境下的GNU软件。
  • Cygwin 通过Cygwin1.dll的文件实现操作系统API的转换,模拟了Linux的调用接口给程序,程序以Linux的方式调用系统API,但这个API的目标库是Cygwin1.dll,Cygwin1.dll再调用Windows对用的方式实现,再把结果返回给程序

4. 两者的区别

  • MinGW生成的程序,究其本质调用的是Kernel.32导出的标准Windows系统API,在windows下Mingw的编译性能会高一些,编译速度也会快一些。
  • Cygwin更像一个平台,它相对完整地模拟了LInux,提供了一个接近2M的Cygwin1.dll的文件作为目标库,来模拟Linux系统的接口,但是相对来说编译的速度就要慢一些。如果想要在Windows上开发可以运行在LInux上的程序,应该选用Cygwin。
  • 总的来说:

    1. cygwin大,mingw小
    2. cygwin编译后的exe需要cygwin1.dll作为支持,而mingw不需要就可以直接运行,因为有中间层所以cygwin慢,mingw快。
    3. cygwin包含的内容更全面,能编译通过的linux源文件更多,mingw的min是minimalist所以能编译通过的更少。但,不是全部,就是说别指望你可以把任何为linux写的源代码在cygwin或mingw编译通过并运行。

5. MinGW、MinGw-w64、TDM-GCC

  • MinGW是最先出来的,但是当时只有32位系统,所以支持32位系统;
  • Mingw-w64 既支持64位,也支持32位,也支持32位和64位的交叉编译;gcc官方支持Mingw-w64,所以更建议Mingw-w64.
  • TDM-GCC: 32位的用的是Mingw,64位用的是MinGW64.
  • 此外还有一个IDE,CodeBlock,使用 起来相对简单,具有较强的跨平台性,比较适合不习惯使用命令行的新手。

6. 总结

   事实上,cygwin/gcc和Mingw都是为了gcc可以在windows下使用的编译环境,可以方便进行一些类Linux环境下的编程。但是两种平台不管是哪一种,Linux程序都不能直接运行在Windows下的,需要对程序进行重新编译,同时建议重要的源码还是应该在真正的Linux环境下进行编译。

   基于执行速度还有大小的原因,我倾向于在Windows下选择使用MinGW64.

附;Mingw-w64的环境搭建

  • 下载安装包,并安装,注意安装时的一些setting 参数。
  • 配置环境变量:环境变量输入安装的地址 ..\Mingw64\bin。
  • 验证配置是否成功:打开cmd命令行,输入gcc -v。

MinGw 和 cygwin 的区别和联系的更多相关文章

  1. MingW和cygwin的区别(转)

    个人总结:读完这段文字需要5分钟 总结: MingW https://zh.wikipedia.org/wiki/MinGW Cygwin https://zh.wikipedia.org/wiki/ ...

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

      网上有很多文章讲它们之间的区别与联系,初学者看的一头雾水,在知乎上看到这篇文章讲的很清楚,容易理解. 在讲区别联系之前,我们先看一下这几个东东的前世今生. Cygwin,原 Cygnus 出品(已 ...

  3. windows - Cygwin和MinGW有什么区别?(MinGW从Cygwin 1.3.3版本中分离出来)

    windows - Cygwin和MinGW有什么区别? 我想让我的C ++项目跨平台,我正在考虑使用Cygwin / MinGW. 但是他们之间有什么区别呢? 另一个问题是,如果没有Cygwin / ...

  4. mingW与cygwin

    转自:http://hi.baidu.com/ooxxer/item/d25dccc072846a50ac00ef7e# 首先MingW和cygwin都可以用来跨平台开发.  MinGW是Minima ...

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

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  6. MinGW与Cygwin的一些杂谈

    引用:http://www.cnblogs.com/fancybit/archive/2012/07/08/2581590.html 首先MingW和cygwin都可以用来跨平台开发.  MinGW是 ...

  7. MinGW与Cygwin的关系与差别

    PART1 共同点 Cygwin / GCC和MinGW都是gcc在WINDOWS下的实现. gcc:它是一款原来只能在Linux系统上使用的开源C语言编译器,后来移植到了Windows操作系统上(以 ...

  8. CygWin、MinGw和Msys的区别

    做了6年的Windows C++,觉得已经没什么挑战力:而且Windows C++已经没落,不得不转Linux C++: 习惯了Windows的界面,习惯了傻瓜式的VS IDE,现在遇到Linux命令 ...

  9. Msys/MinGW与Cygwin/gcc

    一. MinGW MinGW 官方网站为 http://www.mingw.org/ MinGW,即 Minimalist GNU For Windows(GCC compiler suite).它是 ...

随机推荐

  1. STL 容器的概念

    STL 容器的概念 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要. 经典的数据结构数量有限,但是我们 ...

  2. [CF850F] Rainbow Balls

    题目大意 这里 题解 我们枚举最后剩下的球的种类,那么其他球可以看做没用了. 设选定的球有\(a_i\)个,球的总数为\(s=\sum_{i=1}^n a_i\). 现在问题变为:在一个长度为\(s\ ...

  3. LEP所需环境

    一.LEP所需环境 Python 3.6 Flask Docker 二.Python安装 LEP必须在Python3.6环境下运行,如果是在Python2.7下运行会报以下错误! Python3.6的 ...

  4. win7右下角的同步中心怎么去除

    “开始”-“运行”-“regedit”,在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Syncmgr\Handlers” ...

  5. 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告

    P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...

  6. oracle 视图views

    SELECT * FROM DBA_VIEWS WHERE VIEW_NAME='你的视图名'; SELECT * FROM USER_VIEWS WHERE VIEW_NAME='你的视图名'; S ...

  7. Hibernate中常见问题 No row with the given identifier exists问题

    收集:Hibernate中常见问题 No row with the given identifier exists问题的原因及解决 2007年11月21日 15:02:00 eyejava 阅读数:2 ...

  8. 利用solr实现商品的搜索功能

      后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据 ...

  9. poj 3415 后缀数组 两个字符串中长度不小于 k 的公共子串的个数

    Common Substrings Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 11469   Accepted: 379 ...

  10. python【内置函数&自定义函数】

    =========================random函数:=======================