• GNU編譯器

    編輯
    本詞條由“匿名用戶” 建檔。

    GNU編譯器

    編輯

    GNU編譯器(GCC)為編譯器所生產系統GNU項目支持各種編程語言。GCC是GNU工具鏈的關鍵組件,也是大多數與GNU和Linux有關的項目(包括Linux內核)的標準編譯器。在自由軟件基金會(FSF)的分配下GCC?GNU通用公共許可證(GNU GPL)。作為工具和示例,GCC在自由軟件的增長中發揮了重要作用。

    GCC 1.0于1987年首次發布時,由于它僅處理C編程語言,因此被命名為GNU C編譯器。它于當年12月擴展到編譯C ++。后來為Objective-C、Objective-C ++、Fortran、Java、Ada和Go等開發了前端。

    GNU編譯器

    現在,C和C ++編譯器支持OpenMP規范的版本4.5,并且還支持OpenACC?2.0a規范的“xxx改進”的實現。默認情況下,當前版本支持gnu ++ 14(C ++ 14的超集)和gnu11(C11的超集),并且還提供嚴格的標準支持。如GCC 9、C ++ 17支持不再試驗,并且它,或嚴格地GNU ++ 17,是在(即將)GCC GCC 11.還提供了實驗支持默認C ++ 20。

    GCC已被移植到各種指令集體系結構中,并被廣泛用作開發自由軟件和專有軟件的工具。GCC也可用于許多嵌入式系統,包括基于ARM的系統。AMCC和基于Freescale?Power ISA的芯片。編譯器可以針對多種平臺。

    除了作為GNU操作系統的正式編譯器外,GCC還被許多其他類似Unix的現代計算機操作系統(包括大多數Linux發行版)用作標準編譯器。大多數BSD系列操作系統也都切換到了GCC,盡管自那時以來,包括FreeBSD和OpenBSD在內的一些BSD都已遷移到Clang編譯器。使用GCC后,macOS也切換到了Clang。版本也可用于Microsoft Windows和其他操作系統。GCC可以為Android和iOS編譯代碼

    GNU編譯器的設計

    編輯

    GCC的外部接口遵循Unix約定。用戶調用特定語言的驅動程序(gcc用于C、g++C ++等),該程序解釋命令參數,調用實際的編譯器,在輸出上運行匯編器,然后可選地運行鏈接器以生成完整的可執行二進制文件。

    每個語言編譯器都是一個單獨的程序,該程序讀取源代碼并輸出機器代碼。它們都有共同的內部結構。每個語言的前端都會解析該語言的源代碼,并生成一個抽象的語法(簡稱“樹”)。

    如有必要,將它們轉換為中間端的輸入表示形式,稱為GENERIC形式;然后,中間端將程序逐漸轉換為最終形式。編譯器優化和靜態代碼分析技術(例如FORTIFY_SOURCE,嘗試發現某些緩沖區溢出的編譯器指令)被應用于代碼。這些工作于多種表示形式,主要是與體系結構無關的GIMPLE表示和與體系結構有關的RTL表示。最后,使用特定于體系結構的模式匹配生成機器代碼?最初基于Jack Davidson和Chris Fraser的算法。

    除了Ada前端的某些部分外,GCC主要是用C編寫的。該發行版包括Ada、C ++和Java的標準庫,它們的代碼主要用那些語言編寫。在某些平臺上,發行版還包含一個低級運行時庫libgcc,它是由獨立于機器的C語言和特定于處理器的機器代碼的組合編寫的,主要用于處理目標處理器無法直接執行的算術運算。

    2010年5月,GCC指導委員會決定允許使用C ++編譯器來編譯GCC。該編譯器旨在用C以及C ++的功能的子集編寫。特別是,這是為了使GCC的開發人員可以使用C ++的析構函數和泛型功能而決定的。

    2012年8月,海灣合作委員會指導委員會宣布海灣合作委員會現在使用C ++作為其實現語言。這意味著要從源代碼構建GCC,需要一個了解ISO / IEC C ++ 03標準的C ++編譯器。

    2020年5月18日,GCC從ISO / IEC C ++ 03標準移至ISO / IEC C ++ 11標準(即需要編譯、引導、編譯器本身;默認情況下,它會編譯更高版本的C ++)。

    GNU編譯器的功能

    編輯

    GCC的某些功能包括:

    • 鏈接時間優化跨目標文件邊界進行優化,以直接改善鏈接二進制文件。鏈接時優化依賴于一個中間文件,該文件包含目標文件中包含的某些Gimple表示形式的序列化。在源代碼編譯期間,文件與目標文件一起生成。每個源編譯都會生成一個單獨的目標文件和鏈接時幫助程序文件。鏈接目標文件后,將再次執行編譯器,并使用幫助程序文件優化單獨編譯的目標文件中的代碼。
    • 插件可以直接擴展GCC編譯器。插件允許通過作為插件加載的外部代碼針對特定需求量身定制股票編譯器。例如,插件可以添加,替換甚至刪除對Gimple表示形式進行操作的中端通道。已經發布了幾個GCC插件,特別是GCC Python插件,它鏈接到libpython,并允許一個從編譯器內部調用任意Python腳本。目的是允許GCC插件使用Python編寫。MELT插件提供了一種類似于Lisp的高級語言來擴展GCC。
    • 使用-fgnu-tm編譯時的C ++事務內存。
    • 從GCC 10開始,標識符允許使用UTF-8(Unicode)編碼,即C源代碼默認情況下使用UTF-8編碼。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/117152/

    (4)
    詞條目錄
    1. GNU編譯器
    2. GNU編譯器的設計
    3. GNU編譯器的功能

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久