关于GCC Cygwin MinGW MSYS
[轉(zhuǎn)載]關(guān)于Gcc/MinGW/Cygwin/Msys
http://blog.sciencenet.cn/blog-778757-616920.html
一、GCC的歷史
GCC是一個(gè)原本用于Unix-like系統(tǒng)下編程的編譯器。
不過,現(xiàn)在GCC也有了許多Win32下的移植版本。
所以,也許對于許多Windows開發(fā)者來說,GCC還是一個(gè)比較陌生的東西。
所以,我希望通過這章的敘述,讓你——一個(gè)Windows開發(fā)者對GCC這一個(gè)優(yōu)秀的編譯器有一個(gè)大概的了解。
GCC是GNU公社的一個(gè)項(xiàng)目。
是一個(gè)用于編程開發(fā)的自由編譯器。
最初,GCC只是一個(gè)C語言編譯器,他是GNU C Compiler 的英文縮寫。
隨著眾多自由開發(fā)者的加入和GCC自身的發(fā)展,如今的GCC以經(jīng)是一個(gè)包含眾多語言的編譯器了。
其中包括 C,C++,Ada,Object C和Java等。所以,GCC也由原來的GNU C Compiler變?yōu)镚NU Compiler Collection。
也就是 GNU編譯器家族 的意思。當(dāng)然,如今的GCC借助于他的特性,具有了交叉編譯器的功能,即在一個(gè)平臺(tái)下編譯另一個(gè)平臺(tái)的代碼。
直到現(xiàn)在,GCC的歷史仍然在繼續(xù),他的傳奇仍然被人所傳頌。
二、Windows下的GCC家族
起初,GCC是用于Unix,Unix-like系統(tǒng)的編譯器。
不過,現(xiàn)在Windows下也出現(xiàn)了GCC的穩(wěn)定移植版。
這要感謝Internet上眾多程序員的共同努力。
如今,在Windows下比較流行的GCC移植版主要有三個(gè)。他們是 MinGW,Cygwin和Djgpp。
雖然,Djgpp是應(yīng)用于DOS系統(tǒng)的,考慮到windows對DOS的兼容,所以也將Djgpp納入其中了。
總體來說,MinGW,Cygwin和Djgpp各有特色,針對不同的應(yīng)用場合,可以選擇不同的移植版來滿足需要。
MinGW 的主要方向是讓GCC的Windows移植版能使用Win32API來編程。
Cygwin 的目標(biāo)是能讓Unix-like下的程序代碼在Windows下直接被編譯。
Djgpp 則是想讓DOS下也能用上GCC。
所以,對于開發(fā)人員不同的需求。選擇合適的移植版會(huì)讓工作變得輕松而高效。
三、分別介紹
MinGW
Minimalistic GNU for Windows。
她是一個(gè)建立在GCC和binutils 項(xiàng)目上的編譯器系統(tǒng)。和其他GCC的移植版相比,她可以說是最接近Win32的一個(gè)了。
因?yàn)?#xff0c;MinGW幾乎支持所有的Win32API,這也是MinGW的特色之一。
她所連接的程序,不需要任何第三方庫就可以運(yùn)行了。
在某種程度上看,MinGW更像是VC的替代品。
官網(wǎng): http://www.mingw.org
Cygwin
其實(shí)并不是一個(gè)GCC。她是讓W(xué)indows擁有Unix-like環(huán)境的軟件。
所以,GCC自然也就會(huì)包含在里面。
不過,對于開發(fā)者,Cygwin是一個(gè)開發(fā)環(huán)境。而對于用戶來說Cygwin是一個(gè)運(yùn)行環(huán)境。
Cygwin唯一和MinGW最大的區(qū)別在于,使用Cygwin可以在Windows下調(diào)用Unix-like的系統(tǒng)函數(shù)。
比如進(jìn)程函數(shù),等等。所以,雖然說,Cygwin是運(yùn)行在Windows下的,但是她還是使用的是Unix-like系統(tǒng)的函數(shù)和思想。
官網(wǎng): http://www.cygwin.com/
MSYS
Unix-like command line utilities
包括基本的bash, make, gawk and grep 等等。通常也可以認(rèn)為是小型的UNIX on Windows。提供在windows上模擬Unix環(huán)境來使用MinGW。
msys-cn :http://code.google.com/p/msys-cn/MSYS
中國發(fā)行版,用UNIX開發(fā)環(huán)境開發(fā)Windows程序。
MSYS在windows下模擬了一個(gè)類unix的終端,它只提供了MinGW的用戶載入環(huán)境,在MSYS模擬的unix環(huán)境下使用MinGW,就像在Unix使用gcc一樣。
?
What is the difference between Cygwin and MinGW?
Cygwin is an attempt to create a complete UNIX/POSIX environment on Windows. To do this it uses various DLLs. While these DLLs are covered by GPLv3+, their license contains?an exception?that does not force a derived work to be covered by the GPLv3+. MinGW is a C/C++ compiler suite which allows you to create Windows executables without dependency on such DLLs - you only need the normal MSVC runtimes, which are part of any normal Microsoft Windows installation.
You can also get a small UNIX/POSIX like environment, compiled with MinGW called?MSYS. It doesn't have anywhere near all the features of Cygwin, but is ideal for programmers wanting to use MinGW.
As a simplification, it's like this:
-
Compile something in Cygwin and you are compiling it?for Cygwin.
-
Compile something in MingW and you are compiling it?for Windows.
About Cygwin
The purpose of Cygwin is to make porting *nix-based applications to Windows much easier, by emulating many of the small details that Unix-based operating systems provide, and are documented by the?POSIXstandards. If your application assumes that it can use Unix feature such as pipes, Unix-style file and directory access, and so forth, then you can compile it in Cygwin and Cygwin itself will act as acompatibility layer?around your application, so that many of these Unix-specific paradigms can continue to be used with little or no modification to your application.
If you want to compile something for Cygwin and distribute that resulting application, you must also distribute the Cygwin run-time environment (provided by?cygwin1.dll) along with it,?and this has implications for what types of software license you may use.
About MingW
MingW is a Windows port of the GNU compiler tools, such as GCC, Make, Bash, and so on. It does not attempt to emulate or provide comprehensive compatibility with Unix, but instead it provides the minimum necessary environment to use GCC (the GNU compiler) and a small number of other tools?on Windows. It does not have a Unix emulation layer like Cygwin, but as a result your application needs to specifically be programmed to be able to run in Windows, which may mean significant alteration if it was created to rely on being run in a standard Unix environment and uses Unix-specific features such as those mentioned earlier. By default, code compiled in MingW's GCC will compile to a native Windows X86 target, including .exe and .dll files, though you could also cross-compile with the right settings. MingW is an open-source alternative to?Microsoft Visual C++?compiler and its associated linking/make tools.
Considerably sophisticated cross-platform frameworks exist which make the task of porting applications to various operating systems easily - for example the?Qt framework?is a popular framework for cross-platform applications. If you use such a framework from the start, you can not only reduce your headaches when it comes time to port to another platform but you can use the same graphical widgets - windows, menus and controls - across all platforms if you're writing a GUI app.
Wikipedia does a comparison?here.
From Cygwin's?website:
- Cygwin is a Linux-like environment for Windows. It consists of two parts: A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.
- A collection of tools which provide Linux look and feel.
From Mingw's?website:
MinGW ("Minimalistic GNU for Windows") is a collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs
To use advantage of GCC cross platform compiler in Windows, use MinGW.
To use advantage of POSIX standard advanced programming features and tools in Windows, use Cygwin.
http://zhidao.baidu.com/question/351787500.html
GCC 原名為 GNU C 語言編譯器,因?yàn)樗局荒芴幚?C語言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada與其他語言。
GDB是GNU開源組織發(fā)布的一個(gè)強(qiáng)大的UNIX下的程序調(diào)試工具。
MinGW,即 Minimalist GNU For Windows。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動(dòng)態(tài)鏈接庫的情況下使用 GCC 產(chǎn)生 Windows32 程序。
cygwin是一個(gè)在windows平臺(tái)上運(yùn)行的unix模擬環(huán)境,是cygnus solutions公司開發(fā)的自由軟件(該公司開發(fā)了很多好東西,著名的還有eCos,不過現(xiàn)已被Redhat收購)。它對于學(xué)習(xí)unix/linux操作環(huán)境,或者從unix到windows的應(yīng)用程序移植,或者進(jìn)行某些特殊的開發(fā)工作,尤其是使用gnu工具集在windows上進(jìn)行嵌入式系統(tǒng)開發(fā),非常有用。隨著嵌入式系統(tǒng)開發(fā)在國內(nèi)日漸流行,越來越多的開發(fā)者對cygwin產(chǎn)生了興趣。
http://www.cnblogs.com/itech/archive/2010/04/08/1707702.html
一 MinGW MinGW 官方網(wǎng)站為?http://www.mingw.org/?????? MinGW,即 Minimalist GNU For Windows(GCC compiler suite)。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動(dòng)態(tài)鏈接庫的情況下使用 GCC(GNU Compiler C)產(chǎn)生 Windows32 程序。 MinGW:一個(gè)可自由使用和自由發(fā)布的Windows特定頭文件和使用GNU工具集導(dǎo)入庫的集合,在基本層,MinGW 是一組包含文件和端口庫,其功能是允許控制臺(tái)模式的程序使用微軟的標(biāo)準(zhǔn)C運(yùn)行時(shí)間庫(MSVCRT.DLL),該庫在所有的 NT OS 上有效,在所有的 Windows 95 發(fā)行版以上的 Windows OS 有效,使用基本運(yùn)行時(shí),你可以使用 GCC 寫控制臺(tái)模式的符合美國標(biāo)準(zhǔn)化組織(ANSI)程序,可以使用微軟提供的 C 運(yùn)行時(shí)擴(kuò)展。該功能是 Windows32 API 不具備的。下一個(gè)組成部分是 w32api 包,它是一組可以使用 Windows32 API 的包含文件和端口庫。與基本運(yùn)行時(shí)相結(jié)合,就可以有充分的權(quán)利既使用 CRT(C Runtime)又使用 Windows32 API 功能。 實(shí)際上 MinGW 并不僅是一個(gè) C/C++ 編譯器,而是一套 GNU 工具集合。除開 GCC (GNU 編譯器集合) 以外,MinGW 還包含有一些其他的 GNU 程序開發(fā)工具 (比如 gawk bison 等等)。 開發(fā) MinGW 是為了那些不喜歡工作在 Linux(FreeBSD) 操作系統(tǒng)而留在 Windows 的人提供一套符合 GNU 的 GNU 工作環(huán)境。所以,使用 MinGW 我們就可以像在 Linux 下一樣使用 GNU 程序開發(fā)工具。 GCC 就是 MinGW 的核心所在,GCC 是一套支持眾多計(jì)算機(jī)程序語言的編譯系統(tǒng),而且在語言標(biāo)準(zhǔn)的實(shí)現(xiàn)上是最接近于標(biāo)準(zhǔn)的。并且 GCC 幾乎可以移植到目前所有可用的計(jì)算機(jī)平臺(tái)。 GCC 本身不像VC那樣擁有IDE界面(但是有很多的開源的IDE支持使用MinGW,例如codeblocks,eclipse等)。源代碼編輯你可以選用任何你喜歡的文本編輯器(據(jù)說微軟的開發(fā)人員包括 VC 的開發(fā)都不用 VC 所帶的 IDE 編輯器,而是選用 GNU 的 VIM 編輯器)。然后使用 make 等工具來進(jìn)行軟件項(xiàng)目的編譯、鏈接、打包乃至發(fā)布。而像 cvs(svn) 源代碼版本控制工具可以讓世界上任何一個(gè)角落的人都可以參與到軟件項(xiàng)目中來。 關(guān)于 MFC,微軟基礎(chǔ)庫類,這個(gè)隨 VC++ 攜帶的一個(gè)源代碼公開的開發(fā)包,和其他 Windows 程序開發(fā)包是一樣的。如果有 VC++ 的授權(quán),你完全可以使用 MFC 的源代碼,也就是你使用 GCC 來編譯 MFC 程序是完全可以的。 當(dāng)然,GNU 下也有很多 Windows 程序開發(fā)包,甚至有一些是支持跨平臺(tái)使用的。不僅僅可以直接把源代碼編譯為 Windows 程序,也可以不經(jīng)修改編譯為其他操作系統(tǒng)的圖形程序。 二 MSYS? 官方網(wǎng)站為?http://www.mingw.org/? MSYS:Unix-like command line utilities,包括基本的bash, make, gawk and grep 等等。通常也可以認(rèn)為是小型的UNIX on Windows。提供在windows上模擬Unix環(huán)境來使用MinGW。 msys-cn?:http://code.google.com/p/msys-cn/ MSYS中國發(fā)行版,用UNIX開發(fā)環(huán)境開發(fā)Windows程序。 MSYS在windows下模擬了一個(gè)類unix的終端,它只提供了MinGW的用戶載入環(huán)境,在MSYS模擬的unix環(huán)境下使用MinGW,就像在Unix使用gcc一樣。 三 cygwin/gcc cygwin/gcc和MinGW都是gcc在windows下的編譯環(huán)境,但是它們有什么區(qū)別,在實(shí)際工作中如何選擇這兩種編譯器。 cygwin/gcc完全可以和在linux下的gcc化做等號,這個(gè)可以從boost庫的劃分中可以看出來端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。所以完全可以和linux一起同步更新gcc版本,而不用擔(dān)心問題,并且在cygwin/gcc做的東西(不用win32的)可以無縫的用在linux下,沒有任何問題。是在windows下開發(fā)linux程序的一個(gè)很好的選擇。 但是在cygwin/gcc下編譯出來的程序,在windows執(zhí)行必須依賴cygwin1.dll,并且速度有些慢,如果不想依賴這個(gè)東西的化,必須在gcc的編譯選項(xiàng)中加入-mno-cygwin。加入這個(gè)選項(xiàng)其實(shí)gcc編譯器就會(huì)自動(dòng)的選擇在安裝cygwin/gcc時(shí)安上的mingw,這個(gè)mingw就是gcc的一個(gè)交叉編譯。 對于mingw作為gcc在windows上的一個(gè)實(shí)現(xiàn),由于不像cygwin的gcc在一個(gè)模擬linux上運(yùn)行,同時(shí)相當(dāng)一部分linux的工具不能夠使用,不過現(xiàn)在已經(jīng)有Msys這個(gè)模擬unix的shell,可以解決很多的問題。 四 總結(jié) MinGW是windows版本的gcc集合,不需要依賴中間層。 MSYS是小型的linux的環(huán)境的模擬,可以與MinGW結(jié)合來模擬linux環(huán)境下使用MinGW的gcc。 Cygwin是功能強(qiáng)大的linux環(huán)境,由于有cygwin1.dll實(shí)現(xiàn)了底層的windows api到linux api的轉(zhuǎn)化。所以在Cygwin里開發(fā)就相當(dāng)于在linux上開發(fā),對于開發(fā)人員來說就相當(dāng)于調(diào)用linux類型的api,所以這樣開發(fā)的程序也可以直接移植到linux上。但是如果這樣的程序要在windows上執(zhí)行的話,運(yùn)行時(shí)必須要cygwin1.dll支持。 根據(jù)以上的分析,如果在windows開發(fā)linux跨平臺(tái)的程序,linux模擬器Cygwin以及所包含的gcc是很好的選擇,但是開發(fā)的程序必須依賴一個(gè)cygwin1.dll。如果你只是想在windows下使用gcc編譯器也不想依賴其他的dll,mingw是很好的一個(gè)選擇。 http://blog.csdn.net/lord_is_layuping/article/details/7725631 1,mingw/MSYS基本上就是一套編譯環(huán)境,mingw提供編譯器和其他一些與編譯程序相關(guān)的工具。使用這些工具編譯出來的代碼就能夠直接在windows上面跑了2,MSYS實(shí)際上為mingw提供了一個(gè)shell界面,在這個(gè)界面中能夠調(diào)用mingw的gcc,g++編譯器命令,還提供了一些ls,cd,grep等等基本的命令。而且主要的是還能夠使用./configure命令來配置軟件,這個(gè)用途可能就是MSYS的最開始的初衷吧。
3,與mingw/MSYS主要用來提供編譯環(huán)境不同,cygwin更像是一個(gè)運(yùn)行在windows上的linux系統(tǒng),各種命令,各種服務(wù)很多很全,而且,與mingw一樣的,也可以用cygwin來編譯linux系統(tǒng)中的程序,使之能在windows上運(yùn)行,與mingw不同的之處就是,用cygwin編譯出來的程序,在windows上運(yùn)行的時(shí)候需要cygwin.dll運(yùn)行庫的支持,而mingw則是生成出來的二進(jìn)制文件可以直接運(yùn)行,不需要依賴動(dòng)態(tài)鏈接庫。 http://wenda.tianya.cn/question/005c985fdc16e3dd MinGW是指只用自由軟件來生成純粹的Win32可執(zhí)行文件的編譯環(huán)境,它是Minimalist GNU on Windows的略稱。
MinGW,即 Minimalist GNU For Windows。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動(dòng)態(tài)鏈接庫的情況下使用 GCC(GNU Compiler C)產(chǎn)生 Windows32 程序。
MSYS:Minimal GNU(POSIX)system on Windows,是一個(gè)小型的GNU環(huán)境,包括基本的bash,make等等。是Windows下最優(yōu)秀的GNU環(huán)境。
cygwin是一個(gè)在windows平臺(tái)上運(yùn)行的unix模擬環(huán)境,是cygnus solutions公司開發(fā)的自由軟件。
基本上Cygwin是提供了在windows上使用unix環(huán)境的套件不過開發(fā)程式的話編譯出來的程式碼是需要在Cygwin下才能正確執(zhí)行雖然也是可以使用-mno-cygwin的flag
MSYS & MinGW都包括了許多的子套件在里面首先MSYS是Minimal SYStem的縮寫提供了類似Bourne shell環(huán)境下要編譯程式的一些utility MSYS & MinGW都包括了許多的子套件在里頭首先MSYS是Minimal SYStem的縮寫提供了類似Bourne shell環(huán)境下要編譯程式的一些utility像automake之類。
而MinGW則是Minimalistic GNU for Windows的縮寫他包含了許多的compiler for windows、win32api等等是用來編譯for windows的執(zhí)行檔用不像Cygwin編出來的程式必須在Cygwin下才能跑而MinGW則是Minimalistic GNU for Windows的縮寫他包含了許多的compiler for windows、win32api等等是用來編譯for windows的執(zhí)行檔用不像Cygwin編出來的程式必須在Cygwin下才能跑
因此可以看出因此可以看出Cygwin & MSYS的角色是有重疊的我們可以在Cygwin提供的環(huán)境下用MinGW的compiler&library來編出可單獨(dú)執(zhí)行的Windows 執(zhí)行檔在MinGW的FAQ也有提到這點(diǎn)就是把PATH設(shè)定正確,在Cygwin下使用MinGW的compiler & library即可 。
轉(zhuǎn)載于:https://www.cnblogs.com/shangdawei/p/3344327.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的关于GCC Cygwin MinGW MSYS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: loj 1251(2-sat + 输出一
- 下一篇: slider使用TickPlacemen