关于GCC Cygwin MinGW MSYS
[轉載]關于Gcc/MinGW/Cygwin/Msys
http://blog.sciencenet.cn/blog-778757-616920.html
一、GCC的歷史
GCC是一個原本用于Unix-like系統下編程的編譯器。
不過,現在GCC也有了許多Win32下的移植版本。
所以,也許對于許多Windows開發者來說,GCC還是一個比較陌生的東西。
所以,我希望通過這章的敘述,讓你——一個Windows開發者對GCC這一個優秀的編譯器有一個大概的了解。
GCC是GNU公社的一個項目。
是一個用于編程開發的自由編譯器。
最初,GCC只是一個C語言編譯器,他是GNU C Compiler 的英文縮寫。
隨著眾多自由開發者的加入和GCC自身的發展,如今的GCC以經是一個包含眾多語言的編譯器了。
其中包括 C,C++,Ada,Object C和Java等。所以,GCC也由原來的GNU C Compiler變為GNU Compiler Collection。
也就是 GNU編譯器家族 的意思。當然,如今的GCC借助于他的特性,具有了交叉編譯器的功能,即在一個平臺下編譯另一個平臺的代碼。
直到現在,GCC的歷史仍然在繼續,他的傳奇仍然被人所傳頌。
二、Windows下的GCC家族
起初,GCC是用于Unix,Unix-like系統的編譯器。
不過,現在Windows下也出現了GCC的穩定移植版。
這要感謝Internet上眾多程序員的共同努力。
如今,在Windows下比較流行的GCC移植版主要有三個。他們是 MinGW,Cygwin和Djgpp。
雖然,Djgpp是應用于DOS系統的,考慮到windows對DOS的兼容,所以也將Djgpp納入其中了。
總體來說,MinGW,Cygwin和Djgpp各有特色,針對不同的應用場合,可以選擇不同的移植版來滿足需要。
MinGW 的主要方向是讓GCC的Windows移植版能使用Win32API來編程。
Cygwin 的目標是能讓Unix-like下的程序代碼在Windows下直接被編譯。
Djgpp 則是想讓DOS下也能用上GCC。
所以,對于開發人員不同的需求。選擇合適的移植版會讓工作變得輕松而高效。
三、分別介紹
MinGW
Minimalistic GNU for Windows。
她是一個建立在GCC和binutils 項目上的編譯器系統。和其他GCC的移植版相比,她可以說是最接近Win32的一個了。
因為,MinGW幾乎支持所有的Win32API,這也是MinGW的特色之一。
她所連接的程序,不需要任何第三方庫就可以運行了。
在某種程度上看,MinGW更像是VC的替代品。
官網: http://www.mingw.org
Cygwin
其實并不是一個GCC。她是讓Windows擁有Unix-like環境的軟件。
所以,GCC自然也就會包含在里面。
不過,對于開發者,Cygwin是一個開發環境。而對于用戶來說Cygwin是一個運行環境。
Cygwin唯一和MinGW最大的區別在于,使用Cygwin可以在Windows下調用Unix-like的系統函數。
比如進程函數,等等。所以,雖然說,Cygwin是運行在Windows下的,但是她還是使用的是Unix-like系統的函數和思想。
官網: 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一樣。
?
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 語言編譯器,因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada與其他語言。
GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具。
MinGW,即 Minimalist GNU For Windows。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動態鏈接庫的情況下使用 GCC 產生 Windows32 程序。
cygwin是一個在windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收購)。它對于學習unix/linux操作環境,或者從unix到windows的應用程序移植,或者進行某些特殊的開發工作,尤其是使用gnu工具集在windows上進行嵌入式系統開發,非常有用。隨著嵌入式系統開發在國內日漸流行,越來越多的開發者對cygwin產生了興趣。
http://www.cnblogs.com/itech/archive/2010/04/08/1707702.html
一 MinGW MinGW 官方網站為?http://www.mingw.org/?????? MinGW,即 Minimalist GNU For Windows(GCC compiler suite)。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動態鏈接庫的情況下使用 GCC(GNU Compiler C)產生 Windows32 程序。 MinGW:一個可自由使用和自由發布的Windows特定頭文件和使用GNU工具集導入庫的集合,在基本層,MinGW 是一組包含文件和端口庫,其功能是允許控制臺模式的程序使用微軟的標準C運行時間庫(MSVCRT.DLL),該庫在所有的 NT OS 上有效,在所有的 Windows 95 發行版以上的 Windows OS 有效,使用基本運行時,你可以使用 GCC 寫控制臺模式的符合美國標準化組織(ANSI)程序,可以使用微軟提供的 C 運行時擴展。該功能是 Windows32 API 不具備的。下一個組成部分是 w32api 包,它是一組可以使用 Windows32 API 的包含文件和端口庫。與基本運行時相結合,就可以有充分的權利既使用 CRT(C Runtime)又使用 Windows32 API 功能。 實際上 MinGW 并不僅是一個 C/C++ 編譯器,而是一套 GNU 工具集合。除開 GCC (GNU 編譯器集合) 以外,MinGW 還包含有一些其他的 GNU 程序開發工具 (比如 gawk bison 等等)。 開發 MinGW 是為了那些不喜歡工作在 Linux(FreeBSD) 操作系統而留在 Windows 的人提供一套符合 GNU 的 GNU 工作環境。所以,使用 MinGW 我們就可以像在 Linux 下一樣使用 GNU 程序開發工具。 GCC 就是 MinGW 的核心所在,GCC 是一套支持眾多計算機程序語言的編譯系統,而且在語言標準的實現上是最接近于標準的。并且 GCC 幾乎可以移植到目前所有可用的計算機平臺。 GCC 本身不像VC那樣擁有IDE界面(但是有很多的開源的IDE支持使用MinGW,例如codeblocks,eclipse等)。源代碼編輯你可以選用任何你喜歡的文本編輯器(據說微軟的開發人員包括 VC 的開發都不用 VC 所帶的 IDE 編輯器,而是選用 GNU 的 VIM 編輯器)。然后使用 make 等工具來進行軟件項目的編譯、鏈接、打包乃至發布。而像 cvs(svn) 源代碼版本控制工具可以讓世界上任何一個角落的人都可以參與到軟件項目中來。 關于 MFC,微軟基礎庫類,這個隨 VC++ 攜帶的一個源代碼公開的開發包,和其他 Windows 程序開發包是一樣的。如果有 VC++ 的授權,你完全可以使用 MFC 的源代碼,也就是你使用 GCC 來編譯 MFC 程序是完全可以的。 當然,GNU 下也有很多 Windows 程序開發包,甚至有一些是支持跨平臺使用的。不僅僅可以直接把源代碼編譯為 Windows 程序,也可以不經修改編譯為其他操作系統的圖形程序。 二 MSYS? 官方網站為?http://www.mingw.org/? 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/gcc cygwin/gcc和MinGW都是gcc在windows下的編譯環境,但是它們有什么區別,在實際工作中如何選擇這兩種編譯器。 cygwin/gcc完全可以和在linux下的gcc化做等號,這個可以從boost庫的劃分中可以看出來端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。所以完全可以和linux一起同步更新gcc版本,而不用擔心問題,并且在cygwin/gcc做的東西(不用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是很好的一個選擇。 http://blog.csdn.net/lord_is_layuping/article/details/7725631 1,mingw/MSYS基本上就是一套編譯環境,mingw提供編譯器和其他一些與編譯程序相關的工具。使用這些工具編譯出來的代碼就能夠直接在windows上面跑了2,MSYS實際上為mingw提供了一個shell界面,在這個界面中能夠調用mingw的gcc,g++編譯器命令,還提供了一些ls,cd,grep等等基本的命令。而且主要的是還能夠使用./configure命令來配置軟件,這個用途可能就是MSYS的最開始的初衷吧。
3,與mingw/MSYS主要用來提供編譯環境不同,cygwin更像是一個運行在windows上的linux系統,各種命令,各種服務很多很全,而且,與mingw一樣的,也可以用cygwin來編譯linux系統中的程序,使之能在windows上運行,與mingw不同的之處就是,用cygwin編譯出來的程序,在windows上運行的時候需要cygwin.dll運行庫的支持,而mingw則是生成出來的二進制文件可以直接運行,不需要依賴動態鏈接庫。 http://wenda.tianya.cn/question/005c985fdc16e3dd MinGW是指只用自由軟件來生成純粹的Win32可執行文件的編譯環境,它是Minimalist GNU on Windows的略稱。
MinGW,即 Minimalist GNU For Windows。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動態鏈接庫的情況下使用 GCC(GNU Compiler C)產生 Windows32 程序。
MSYS:Minimal GNU(POSIX)system on Windows,是一個小型的GNU環境,包括基本的bash,make等等。是Windows下最優秀的GNU環境。
cygwin是一個在windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件。
基本上Cygwin是提供了在windows上使用unix環境的套件不過開發程式的話編譯出來的程式碼是需要在Cygwin下才能正確執行雖然也是可以使用-mno-cygwin的flag
MSYS & MinGW都包括了許多的子套件在里面首先MSYS是Minimal SYStem的縮寫提供了類似Bourne shell環境下要編譯程式的一些utility MSYS & MinGW都包括了許多的子套件在里頭首先MSYS是Minimal SYStem的縮寫提供了類似Bourne shell環境下要編譯程式的一些utility像automake之類。
而MinGW則是Minimalistic GNU for Windows的縮寫他包含了許多的compiler for windows、win32api等等是用來編譯for windows的執行檔用不像Cygwin編出來的程式必須在Cygwin下才能跑而MinGW則是Minimalistic GNU for Windows的縮寫他包含了許多的compiler for windows、win32api等等是用來編譯for windows的執行檔用不像Cygwin編出來的程式必須在Cygwin下才能跑
因此可以看出因此可以看出Cygwin & MSYS的角色是有重疊的我們可以在Cygwin提供的環境下用MinGW的compiler&library來編出可單獨執行的Windows 執行檔在MinGW的FAQ也有提到這點就是把PATH設定正確,在Cygwin下使用MinGW的compiler & library即可 。
轉載于:https://www.cnblogs.com/shangdawei/p/3344327.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的关于GCC Cygwin MinGW MSYS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: loj 1251(2-sat + 输出一
- 下一篇: slider使用TickPlacemen