现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

Windows 下MSYS、MinGW、Cgywin使用gcc区别

2016-08-27 06:35 工业·编程 ⁄ 共 3033字 ⁄ 字号 暂无评论

一、 在Windows下比较流行的GCC移植版主要有三个。他们是 MinGW,Cygwin和Djgpp。

1.MinGW 的主要方向是让GCC的Windows移植版能使用Win32API来编程。

(使用Win32API的代码可用MinGW的gcc编译,有点像用Linux开发环境开发Windows程序     如果你只是想在windows下使用gcc编译器也不想依赖其他的dll,mingw是很好的一个选择。 )

2.Cygwin 的目标是能让Unix下的程序代码在Windows下直接被编译。

(模拟Linux环境,包括调用Linux下的函数,可以大概认为在Cygwin下运行的程序可以直接在Linux下运行,反之亦然)

3.Djgpp 则是想让DOS下也能用上GCC。

所以,对于开发人员不同的需求。选择合适的移植版会让工作变得轻松而高效。

二 、介绍

MinGW

Minimalistic GNU for Windows。

她是一个建立在GCC和binutils 项目上的编译器系统。和其他GCC的移植版相比,她可以说是最接近Win32的一个了。

因为,MinGW几乎支持所有的Win32API,这也是MinGW的特色之一。

她所连接的程序,不需要任何第三方库就可以运行了,允许人们在没有第三方动态链接库的情况下使用 GCC(GNU Compiler C)产生 Windows32 程序。

在某种程度上看,MinGW更像是VC的替代品。

实际上 MinGW 并不仅是一个 C/C++ 编译器,而是一套 GNU 工具集合。除开 GCC (GNU 编译器集合) 以外,MinGW 还包含有一些其他的 GNU 程序开发工具

官网: http://www.mingw.org

Cygwin

其实并不是一个GCC。她是让Windows拥有Unix环境的软件, 可以直接编译unix下程序。

所以,GCC自然也就会包含在里面。

不过,对于开发者,Cygwin是一个开发环境。而对于用户来说Cygwin是一个运行环境。

Cygwin唯一和MinGW最大的区别在于,使用Cygwin可以在Windows下调用Unix的系统函数。

比如进程函数,等等。所以,虽然说,Cygwin是运行在Windows下的,但是她还是使用的是Unix系统的函数和思想。

官网: http://www.cygwin.com/

MSYS

Unix-like command line utilities

包括基本的bash, make, gawk and grep 等等。通常也可以认为是小型的UNIX on Windows。提供在windows上模拟Unix环境来使用MinGW。

msys-cn :http://code.google.com/p/msys-cn/MSYS

中国发行版,用UNIX开发环境开发Windows程序。

MSYS在windows下模拟了一个类unix的终端,它只提供了MinGW的用户载入环境,在MSYS模拟的unix环境下使用MinGW,就像在Unix使用gcc一样。

三 、cygwin和MinGW区别

       cygwin和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器。

        cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin做的东西(不用win32的)可以无缝的用在linux下,没有任何问题(这一点值得商榷)。是在windows下开发linux程序的一个很好的选择。

       但是在cygwin/gcc下编译出来的程序,在windows执行必须依赖cygwin1.dll,并且速度有些慢,如果不想依赖这个东西的化,必须在gcc的编译选项中加入-mno-cygwin。加入这个选项其实gcc编译器就会自动的选择在安装cygwin/gcc时安上的mingw,这个mingw就是gcc的一个交叉编译。

   

      而mingw作为gcc在windows上的一个实现,由于不像cygwin的gcc在一个模拟linux上运行,同时相当一部分linux的工具不能够使用,不过现在已经有Msys这个模拟unix的shell,可以解决很多的问题。

四 总结

      MinGW是windows版本的gcc集合,不需要依赖中间层。

      MSYS是小型的linux的环境的模拟,可以与MinGW结合来模拟linux环境下使用MinGW的gcc。

      Cygwin是功能强大的linux环境,由于有cygwin1.dll实现了底层的windows api到linux api的转化。所以在Cygwin里开发就相当于在linux上开发,对于开发人员来说就相当于调用linux类型的api,所以这样开发的程序也可以直接移植到linux上。但是如果这样的程序要在windows上执行的话,运行时必须要cygwin1.dll支持。

 

      根据以上的分析,如果在windows开发linux跨平台的程序,linux模拟器Cygwin以及所包含的gcc是很好的选择,但是开发的程序必须依赖一个cygwin1.dll。如果你只是想在windows下使用gcc编译器也不想依赖其他的dll,mingw是很好的一个选择。

cygwin 和 mingw区别

说一点,什么cygwin编译的程序可以无缝在linux上运行,根本就不能这么理解。

cygwin官方的一个定义是Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.

翻译过来就是

cygwin不是让linux程序能在windows上运行的方法,如果你想要让linux程序能在windows运行,那么你只有用cygwin来重新编译一下源文件。

这句话完全反驳了无缝运行在linux的说法。就是说你在linux上编译的elf程序不能直接拿到cygwin上运行,同样,你用cygwin编译的程序也不是linux的elf格式,而是exe格式,exe是无法在linux上运行的。

cygwin和mingw都是为用户提供在windows操作系统使用GNU工具的方法,使得在windows上可以编译为linux写的c源代码并运行(让你可以用signal等linux才有的api)。真正的不同在于

1,cygwin大,mingw小

2,cygwin编译后的exe需要cygwin1.dll作为支持,而mingw不需要就可以直接运行,因为有中间层所以cygwin慢,mingw快。

3,cygwin包含的内容更全面,能编译通过的linux源文件更多,mingw的min是minimalist所以能编译通过的更少。但,不是全部,就是说别指望你可以把任何为linux写的源代码在cygwin或mingw编译通过并运行。

mingw:

mingW只能编译使用Win32API的程序 ,如果需要编译linux 下的程序,最好用cygwin

比如mingw,无法编译这些linux 头文件的 netinet/in.h,arpa/inet.h,netinet/in.h,arpa/inet.h,#include <sys/ioctl.h>等等

不过也有cygwin不支持的Unix特性,比如pthread

给我留言

留言无头像?