MinGW & Cygwin

  MinGW和Cygwin都解决了C++跨平台交叉编译的问题,使Linux下的程序在Windows上编译运行成为可能。

  MinGW给习惯在Linux上开发的人员在windows上提供了一套类似的工具集;Cygwin主要是对于在Linux的程序,无需改动代码即可移植到windows上;gnuwin32主要是对习惯linux工具的人员,在windows上提供一套类似的命令

  Unix下编译通过的C代码,在win32下编译是不能通过的 ,当然Unix和win32的API都符合标准C,即大多数函数调用在unix和win32下是相同的.但unix有自己一些独特的API(如fork,spawn,signals,select,sockets等),如果代码中使用了这些API,在win32下当然找不到对应的库。但这些API的功能在win32中也能实现,下面提供两种让window编译Unix风格代码的方法:

  • 修改编译器,让window下的编译器把诸如fork的调用翻译成等价的形式,这就是MinGW的做法
  • 修改库,让window提供一个类似unix提供的库,它们对程序的接口如同unix一样,而这些库是由win32的API实现的,这就是Cygwin的做法

MinGW

  MinGW, a contraction of "Minimalist GNU for Windows", is a minimalist development environment for native Microsoft Windows applications.

  MinGW provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications, and which do not depend on any 3rd-party C-Runtime DLLs.

  MinGW给在习惯在Linux开发的人员提供了一套在Windows上开发类似Linux的工具集,它包括一系列软件:编译工具、链接工具、转储工具、调试工具和其它开发工具等。MinGW还提供一些开源的基础支持库,像GNU的C/C++ RT库(libc、libstdc++),POSIX的基本调用界面(包括pthread),甚至还有OpenGL和Windows API的调用接口等。几乎所有MinGW中的软件都是从GNU项目或Linux下移植到Windows下的。

  与GNU不同的是,MinGW编译生成的是Windows下的可执行文件(.exe)或库文件(.dll,.lib),不过编译过程中的的中间文件仍然是.o文件,而不是.obj文件。

  MinGW的POSIX界面远没有Cygwin实现的那么全面(如:连BSD/Linux Socket都没有,只能用Winsock),所以MinGW只是用来开发Windows专属应用的工具集

  后来MinGW有了一个子项目叫:MSYS,其中包括了更多的Linux工具,其目标类似Cygwin:构建一套Windows下的Linux模拟环境。

  MSYS, a contraction of "Minimal SYStem", is a Bourne Shell command line interpreter system. Offered as an alternative to Microsoft‘s cmd.exe, this provides a general purpose command line environment, which is particularly suited to use with MinGW, for porting of many Open Source applications to the MS-Windows platform; a light-weight fork of Cygwin-1.3, it includes a small selection of Unix tools, chosen to facilitate that objective.

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

Cygwin

  Cygwin is:

  • a large collection of GNU and Open Source tools which provide functionality similar to a Linux distributionon Windows.
  • a DLL (cygwin1.dll) which provides substantial POSIX API functionality.

  Cygwin 名字来源于GNU、Cygnus、Windows三者的缩写。Cygwin的目标是:构建一套Windows下的Linux模拟环境。因此,Cygwin是一个庞大的项目,不只包括Linux下的开发环境,也包括工作环境和各种各样的Linux下的软件。

  在早期,Cygwin的核心是cygwin1.dll,可以认为它是一个POSIX界面的实现,依靠这个动态链接库,Unix/Linux下的软件可以很容易的移植到Windows下,并且风格保持原有的不变。不过,随着Cygwin的发展,越来越多的Unix/Linux程序的移植,建立基于Cygwin的复杂程序依赖的库也越来越多,现在装完默认配置的Cygwin后,就会发现有很多cyg打头的动态链接库。

注:

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

  Cygwin中文网:http://www.cygwin.cn/

GnuWin32

  GnuWin32使windows用户可以在命令行窗口中使用各种各样的linux命令,就跟使用普通的windows命令一样简单。

  注:GnuWin32官网:http://gnuwin32.sourceforge.net/

时间: 2024-12-18 18:13:42

MinGW & Cygwin的相关文章

使用minGW/cygwin在Windows是用于gcc开发

刚才记录了下用eclipse在linux下开发,突然想起来也另一种方法:MinGW. MinGW是Windows的gcc开发工具,直接使用Windows的运行库,所以可以在windows下面方便的用gcc进行编译. 但是这个方法很有局限,那就是没办法使用Linux下面的系统函数,除非自己的代码不依赖于任何系统api,然而这显然不可能.所以要在Windows下模拟Linux,仅仅是MinGW还是不够的. 但是还有另一种方法,那就是cygwin,它是一个在Window下模拟的简单的Linux环境,说

Gcc\MingW\Cygwin\Msys简介

一.GCC的历史GCC是一个原本用于Unix-like系统下编程的编译器.不过,现在GCC也有了许多Win32下的移植版本.所以,也许对于许多Windows开发者来说,GCC还是一个比较陌生的东西.所以,我希望通过这章的叙述,让你——一个Windows开发者对GCC这一个优秀的编译器有一个大概的了解.GCC是GNU公社的一个项目.是一个用于编程开发的自由编译器.最初,GCC只是一个C语言编译器,他是GNU C Compiler 的英文缩写.随着众多自由开发者的加入和GCC自身的发展,如今的GCC

一个无锁消息队列引发的血案:怎样做一个真正的程序员?(二)——月:自旋锁

前续 一个无锁消息队列引发的血案:怎样做一个真正的程序员?(一)——地:起因 一个无锁消息队列引发的血案:怎样做一个真正的程序员?(二)——月:自旋锁 平行时空 在复制好上面那一行我就先停下来了,算是先占了个位置,虽然我知道大概要怎么写,不过感觉还是很乱. 我突然想到,既然那么纠结,那么混乱,那么不知所措,我们不如换个视角.记得高中时看过的为数不多的长篇小说<穆斯林的葬礼>,作者是:霍达(女),故事描写了两个发生在不同时代.有着不同的内容却又交错扭结的爱情悲剧,一个是“玉”的故事,一个是“月”

gcc for Windows 开发环境介绍

导读: 在Windows操作系统下的gcc 第一节 GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器. 只是,如今GCC也有了很多Win32下的移植版本号.所以,或许对于很多Windows开发人员来说,GCC还是一个比較陌生的东西.所以,我希望通过这章的叙述,让你--一个Windows开发人员对GCC这一个优秀的编译器有一个大概的了解. 历史 GCC是GNU公社的一个项目.是一个用于编程开发的自由编译器.最初,GCC仅仅是一个C语言编译器,他是GNU C Compiler

一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]

目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的艺术 [续] 开篇 这是第五篇的后续,这部分的内容同时会更新和添加在 第五篇:RingQueue(中) 休眠的艺术 一文的末尾. 归纳 紧接上一篇的末尾,我们把 Windows 和 Linux 下的休眠策略归纳总结一下,如下图: 我们可以看到,Linux 下的 sched_yield() 虽然包括了

详解 Windows 下 Eclipse CDT 配置 C/C++ 编译环境

其实 windows 下,C.C++ IDE 也不少,但许多IDE的 UI 和用户体验基本都停留在上个世纪,除了 eclipse CDT 和 visual studio,但后者现在是个巨无霸,安装文件都 3 个多G,而且这货安装容易删除难,但 eclipse CDT 就不一样了,熟悉 java eclipse 的同学能快速适应~ 1.Eclipse及CDT的安装 到Eclipse的官方网站http://www.eclipse.org上下载Eclipse. 离线安装CDT.CDT的全称是C/C++

Mongoose 使用

1.Mongoose介绍 Mongoose开源项目的主页是http://code.google.com/p/mongoose/.Mongoose是一个web服务器,通过提供一个web接口给它,它可以嵌入到现有的应用程序中去.Mongoose web服务器的执行是自满足的,它不依赖于任何其他服务.如果你将它复制到任何目录并执行,它将将启动web服务并将当前目录作为主目录.端口号是8080.当然这些配置选项都可以通过配置文件mongoose.conf设置. Mongoose它的前身是shttpd,它

Windows下安装GCC

2333今天才想起来要在windows上搭建一套gcc, gdb, make工作环境. 网上查了一下在Windows下比较流行的GCC移植版本主要有三个.他们是 MinGW,Cygwin和Djgpp. 总体来说, MinGW , Cygwin 和 Djgpp 各有特色,针对不同的应用场合,可以选择不同的移植版来满足需要. MinGW 这个系列的移植,主要方向是让 GCC 的 Windows 移植版能使用 Win32API 来编程.而 Cygwin 的目标是能让 Unix-like 下的程序代码在

Linux --windows vs

我其实并不是很清楚我在做什么....希望做完之后可以解答....... 在看了一堆GNU, Clang, GCC, QT, MinGW, CygWin, POSIX 这些概念之后,我觉得我在做的事情就是要把一个LINUX的项目在vs里重建出来 太扯了,我就不明白那个人为什么要在MinGW里面写个解析文件的项目,要我这种只用过vs的程序怎么办! 确立方向就用了好久 我目前在把这个项目往vs里拖,遇到一堆unix里面的api 一种在win里面有替代 一种....去死...就给他们先置空编过去这样op