# C++環境 ###### tags: `C++Book` ## GNU “GNU ,名稱來自Gnu's Not Unix"的縮寫,==一個類UNIX 的操作系統==,由GNU計劃推動,目標在於創建一個完全兼容於UNIX 的自由軟件環境。” GNU計劃本來是為了開發一個自由系統來取代UNIX的,但是由於開發的內核hurd一直不怎麼樣,這個系統至今都沒出穩定版本,然而GNU計劃中開發的其他一些自由軟件,比如GCC編譯器,卻非常的好,在移植到各大操作系統上一直廣泛使用至今。 ## gcc ==“ GCC (GNU Compiler Collection ,GNU編譯器套裝)==,是一套由GNU 開發的編程語言編譯器。它是一套以GPL 及LGPL 許可證所發布的自由軟件,也是GNU項目的關鍵部分,亦是自由的類Unix 及蘋果電腦Mac OS X 操作系統的標準編譯器。GCC(特別是其中的C語言編譯器)也常被認為是跨平台編譯器的事實標準。 它原本只能處理C語言。GCC很快地擴展,變得可處理C++。之後也變得可處理Fortran、Pascal、Objective-C、Java、Ada,以及Go與其他語言。 ### gcc 和 g++ GCC就代表the GNU Compiler Collection,所以表示一堆編譯器的合集。==g++ 則是GCC的 c++ 編譯器==。 現在你在編譯代碼時調用的gcc,已經不是當初那個c語言編譯器了,更確切的說他是一個驅動程序,根據代碼的後綴名來判斷調用c編譯器還是 c++ 編譯器 (g++) 。比如你的代碼後綴是*.c,他會調用c編譯器還有linker去鏈接c的library。如果你的代碼後綴是cpp, 他會調用 g++ 編譯器,當然library call也是 c++ 版本的。 ## Clang “ Clang 是一個C 、C++ 、Objective-C 和Objective-C++ ==編程語言的編譯器前端==。它採用了底層虛擬機(LLVM)作為其後端。 它的目標是提供一個==GCC的替代品==。 **GCC** : 目前作為跨平台編譯器來說它的兼容性無最強,性能較差 **Clang,LLVM** : 的蘋果為了提高性能,因此專門針對mac系統開發了專用的編譯器clang與llvm,clang用於編譯器前段,llvm用於後端。 ## LLVM “ LLVM ,它是一個編譯器的基礎建設,以C++ 寫成。它是為了任意一種編程語言寫成的程序,利用虛擬技術,創造出編譯時期,鏈結時期,運行時期以及“閒置時期”的優化。 ## MinGW MinGW提供了一套簡單方便的Windows下的==基於GCC程序開發環境==。 MinGW收集了一系列免費的Windows使用的頭文件和庫文件; 同時整合了GNU的工具集,特別是GNU程序開發工具,如經典gcc, g++, make等。MinGW是完全免費的自由軟件,它在Windows平台上模擬了Linux下GCC的開發環境,為 C++ 的跨平台開發提供了良好基礎支持,為了在Windows下工作的程序員熟悉Linux下的 C++ 工程組織提供了條件。 ## 編譯器相關知識 >問題:蘋果以clang作為編譯器前端,llvm作為編譯器後端,那麼編譯器的前後端到底是什麼東西呢? 最簡單的GCC使用指令如下所示: `gcc hello.c -o hello` GCC接受hello.c作為輸入,最後產生目標可執行代碼hello。這個簡單的流程實際上經歷了很多步驟,如下圖所示:  以中間代碼為分界,前面的詞法分析、語法分析、語義分析我們把它稱之為前端處理,後面的優化和目標代碼生成我們稱之為後端處理。 試想一下,是否可以為不同的高級語言單獨寫一個前端,然後為不同的處理器架構單獨寫一個後端呢? GCC基本上也是這麼實現的,不過不要誤會,並沒有一個統一的gcc執行程序能夠處理如此多的前端和後端,每個語言的編譯器都是一個獨立的程序(如C語言的編譯器是gcc,C++的編譯器是g++),而不同的後端也要對應不同的可執行程序。你可以下載單獨的一份GCC源代碼,通過不同的configure來生成自己需要的編譯器。 >[https://blog.csdn.net/itianyi/article/details/43057279](https://blog.csdn.net/itianyi/article/details/43057279) >作者:李锋 链接:https://www.zhihu.com/question/20940822/answer/16667772 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up