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 和 cygwin 的区别和联系 (跨平台 windows运行linux程序)相关推荐

  1. MinGw 和 cygwin 的区别和联系

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

  2. minGW, cygwin, GnuWin32【C++的跨平台交叉编译问题】

    这几天在整C++的跨平台交叉编译问题,总算告一段落,把具体涉及的内容整理如下: 首先,三个的官方网站分别是: minGW:http://www.mingw.org cygwin:  http://ww ...

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

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

  4. Cygwin、Msys、MinGW、Msys2的区别与联系

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

  5. mingW与cygwin 异同

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

  6. mingW与cygwin

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

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

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

  8. MinGW和 MinGW-W64的区别

    部分参照备忘录原文: bitbucket.org/FrankHB/yslib/src/50c3e6344a5a24b2382ce3398065f2197c2bd57e/doc/Workflow.Ann ...

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

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

最新文章

  1. jemeter多场景混合案例_Redis 混合存储最佳实践指南
  2. 【转】DELPHI 对DICOM中的窗宽、窗位调整
  3. 云智视像 | 内推两个年薪可达70万+的CV算法职位~base杭州上海
  4. 让Android Studio 使用上vs的android模拟器
  5. 磁盘IO单线程顺序写时最快的,如果多线程写,磁盘的磁头要不断重新寻址,所以写入速度反而会慢...
  6. 刚刚!中科院主导的国产编程语言木兰负责人回应了!承认32位机器上,是基于Python二次开发!...
  7. 18-(基础入门篇)GPRS(Air202)拨打电话
  8. html的submitt跳转到哪,SUBMIT 用法
  9. torchsummary的用法
  10. 如何 使用 apache 访问 本地目录及本地文件
  11. java基础第四课(封装,继承,接口)
  12. Mapper未生成impl
  13. sql 中or与in的查询效率对比
  14. android手电筒项目代码,android手电筒的源码
  15. 新学期|除了认真学习的“flag”,你还立了啥?
  16. 5分钟轻松建站(专业下载网站),无需空间和技术.
  17. halcon学习笔记—电脑无线连接手机摄像头
  18. GD32F450创建工程模板
  19. Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)
  20. (翻译)用米白色文本字段强化注册表单

热门文章

  1. 铁大Facebook——电梯演讲
  2. java B2B2C Springcloud多租户电子商城系统-docker-feign-hystrix-ribbon(七)
  3. DataGridView控件60招(一)
  4. kickstart+tftp部署redhat系统
  5. debian配置集锦
  6. Java Collections.sort方法对list集合排序
  7. 如何设计系统的错误码及错误信息
  8. 对par.markdown解析进行完善
  9. Perl通过WIN32 OLE来操作EXCEL
  10. 谈谈Koa 中的next