天天看點

初識GNU, GCC, CYGWIN, MINGW, MSYS

        我目前在公司做的CAD平台項目是跨平台的開發項目,由于公司以前一直都是在windows上面開發項目,缺少在linux等平台下的開發經驗,我們組的架構師為我們選擇了windows下的類UNIX模拟編譯環境MingW。雖然我經常聽到、看到很多跨平台程式設計,也嘗試用過,但是對跨平台開發并沒有去深入了解和涉及,可謂是隻問其聲,不見其人。昨天我在windows下使用MingW對我所做的子產品進行類Unix的編譯,花了我不少時間。決定好好了解一下開發平台和編譯器。

1)      Unix (1970-至今)

        參考:百度百科:Unix

        Unix作業系統,是一個強大的多使用者、多任務作業系統,支援多種處理器架構,按照作業系統的分類,屬于分時作業系統,最早由Ken Thompson, Dennis Richie和Douglas Mcllroy于1969年在AT&T的貝爾實驗室開發。目前它的商标權由國際開放标準組織所擁有,隻有符合單一UNIX規範的UNXI系統才能使用UNIX這個名稱(比如HP-UX, Mac OS X, iOS等),否則隻能成為類UNIX(UNIX-like, 比如GNU, Linux, Android等)。

        1971年,Ken Thompson(Unix之父)申請到了一台PDP-11/24的機器,Unix第一版就是運作在這台機器上。

        1973年,Ken Thompson與Dennis Ritchie感到用彙編語言做移植太頭痛,他們想用進階語言來完成第三版。一開始他們嘗試使用Fortan,可是失敗了。後來他們用一個叫BCPL(Basic Combined Programming Language)的語言開發,他們整合了BCPL形成B語言,後來Dennis Ritchie(C語言之父)覺得B語言還是不能滿足要求,于是改良了B語言,這就是今天的大名鼎鼎的C語言。于是Ken Thompson與Dennis Ritchie成功的用C語言重寫了Unix的第三版核心。Unix和C完美的結合成為一個統一體,C與Unix很快成為世界的主導。

        Unix的第一篇文章“The UNIX Time Sharing System”由Ken Thompson和Dennis Ritchie于1974年7月的The Communications of the ACM發表。

        說到這裡,我再插播一下面向對象和C++之父。

        參考:面向對象方法_版本曆史,百度百科:Bjarne Stroustrup

        OO方法起源于面向對象的程式設計語言(簡稱為OOPL)。50年代後期,在用FORTRAN語言編寫大型程式時,常出現變量名在程式不同部分發生沖突的問題。鑒于此,ALGOL語言的設計者在ALGOL60中采用了以"Begin……End"為辨別的程式塊,使塊内變量名是局部的,以避免它們與程式中塊外的同名變量相沖突。這是程式設計語言中首次提供封裝(保護)的嘗試。此後程式塊結構廣泛用于進階語言如Pascal 、Ada、C之中。

        60年代中後期,Simula語言在ALGOL基礎上研制開發,它将ALGOL的塊結構概念向前發展一步,提出了對象的概念,并使用了類,也支援類繼承。70年代,Smalltalk語言誕生,它取Simula的類為核心概念,它的很多内容借鑒于Lisp語言。由Xerox公司經過對Smautalk72、76持續不斷的研究和改進之後,于1980年推出商品化的,它在系統設計中強調對象概念的統一,引入對象、對象類、方法、執行個體等概念和術語,采用動态聯編和單繼承機制。

        面向對象源出于Simula,真正的OOP由Smalltalk奠基。Smalltalk現在被認為是最純的OOPL。

        1986年在美國舉行了首屆"面向對象程式設計、系統、語言和應用(OOPSLA'86)"國際會議,使面向對象受到世人矚目,其後每年都舉行一次,這進一步标志OO方法的研究已普及到全世界。

        1982年,美國AT&T公司貝爾實驗室的Bjarne Strousrup博士在c語言的基礎上引入并擴充了面向對象的概念,發明了一種新的程式語言。為了表達該語言與c語言的淵源關系,它被命名為C++。而Bjarne Stroustrup博士被尊稱為C++語言之父。此後C++語言曆經了不斷地完善,例如1990年C++語言引入模闆和異常處理的概念,1993年引入運作時類型識别(RTTI)和命名空間(Name Space)的概念。1997年,C++語言成為美國國家标準(ANSI)。1998年,C++語言又稱為了國際标準(ISO),同年,B.S推出了其經典著作The C++ Programming Language的第三版。

2)      GNU計劃(1983年-至今), GCC(1987年-至今), GNU/Linux(1992年-至今)

        參考百度百科:GNU,wikipedia: GNUCompiler Collection,百度百科:GCC

        GNU(GNU’s Not Unix)計劃,是由Richard Stallman在1983年9月27日公開發起的。它的目标是建立一套完全自由的作業系統。為保證GNU軟體可以自由地“使用、複制、修改和釋出”,所有GNU軟體都有一份在禁止其他人添加任何限制的情況下授權給任何人的協定條款,GNU通用公共許可證(GNU General Public License, GPL),即“反版權”(或稱Copyleft)概念。(這個計劃也正符合它的名稱GNU’s Not Unix,在20世紀70年代,AT&T公司開始注意到Unix所帶來的商業價值。公司的律師開始尋找一些手段來保護Unix,并讓其成為一種商業機密。從1979年Unix的版本V7開始,Unix的許可證開始禁止大學使用Unix的源碼,包括在授課中學習。也許是因為這個原因,Stallman發起了GNU計劃。)

        1985年Richard Stallman又創立了自由軟體基金會(Free Software Foundation)來為GNU計劃提供技術、法律以及财政支援。

        1987年5月22日,由Richard Stallman上司開發的GCC首次釋出。這時候的GCC為GNU C Compiler,因為它隻能處理C語言,同年的12月,GCC擴充到可以支援處理C++。之後很快擴充能夠支援更多程式設計語言,如Frotan, Pascal, Objective-C, Java, Ada, Go等。

        GCC(GNU Compiler Collection,GNU編譯器套裝)是一套由GNU計劃開發的支援多種程式設計語言的編譯器。GCC是自由軟體發展過程中的著名例子,由自由軟體基金會以GPL協定釋出。GCC是大多數類Unix作業系統(如Linux, BSD, Mac OS X?等)的标準的編譯器,GCC同樣适用于微軟的Windows。GCC支援多種計算機體系晶片,如X86, ARM,并已移植到其他多種硬體平台。

        1991年Linus Torvalds(Linux之父)編寫了與Unix相容的Linux作業系統核心并在GPL條款下釋出。Linux之後在網上廣泛流傳,許多程式員參與了開發與修改。1992年Linux與其他GNU軟體結合,完全自由的作業系統正式誕生。該作業系統往往被稱為“GNU/Linux”或簡稱Linux。

        許多UNIX系統上也安裝了GNU軟體,因為GNU軟體的品質比之前UNIX的軟體還要好。GNU工具還被廣泛地移植到Windows和Mac OS上。

        GNU包含3個協定條款:GPL(GNUGeneral Public License, GNU通用公共許可證),LGPL(GNU Lesser General Public License, GNU較寬松公共許可證)和GFDL(GNUFree Documentation License, GNU自由文檔許可證)。

3)      Windows

        Windows作業系統是如何誕生的在現在很多網站上的解釋都不是很詳細的(可能是跟windows系統的出生背景有關吧。。),有興趣的可以看下《矽谷之火》,裡面有講到windows作業系統的來龍去脈,在這裡我不陳述了。

3)      gcc, cygwin, mingw 和msys

        可見另外兩篇部落格:

  •  什麼是GCC?
  • Gcc/MinGW/Cygwin/Msys 分别是什麼?