日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GCC编译过程以及对应FILE文件表

發布時間:2024/4/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GCC编译过程以及对应FILE文件表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gcc/g++在執行編譯工作的時候,總共需要4步

(1).預處理:生成.i的文件[預處理器cpp]
(2).編譯:將預處理后的文件轉換成匯編語言,生成文件.s[編譯器egcs]
(3).匯編:有匯編變為目標代碼(機器代碼)生成.o的文件[匯編器as]
(4).連接: 鏈接目標代碼,生成可執行程序[鏈接器ld]

絕大多數編譯器并不是一個單一的龐大程序。它們通常由多達六七個稍小的程序所組成,這些程序由一個叫做“編譯器驅動器( compiler driver)的控制程序來調用。這些可以方便地從編譯器中分離出來的單獨程序包括:預處理器( preprocessor)、語法和語義檢查器( syntactic and semantic checker)、代碼生成器( code generator)、匯編程序( assembler)、優化器( optimizer)、鏈接器( linker),當然還包括一個調用所有這些程序并向各個程序傳遞正確選項的驅動器程序( driver program)(見圖5-1)。優化器幾乎可以加在上述所有階段的后面。當前的 SPARC編譯器在編譯器的前端和后端之間的中間表示層執行絕大部分的優化措施

總體選項(Overall Option)

-x language

明確指出后面輸入文件的語言為 language (而不是從文件名后綴得到的默認選擇). 這個選項應用于后面
所有的輸入文件,直到遇著下一個-x選項. language 的可選值 有 c, objective-c, c-header,
c++, cpp-output, assembler,和assembler-with-cpp.

-x none

關閉任何對語種的明確說明,因此依據文件名后綴處理后面的文件(就象是從未使用過-x選項).

如果只操作四個階段(預處理,編譯,匯編,連接)中的一部分,可以使用-x選項(或文件名后綴)告訴 gcc 從哪里開始,用-c, -S,或-E選項告訴 gcc 到 哪里結束.
注意,某些選項組合(例如, -x cpp-output -E)使 gcc 不作任何事情.

-c

編譯或匯編源文件,但是不作連接.編譯器輸出對應于源文件的目標文件.缺省情況下, GCC 通過用.o替換源文件名后綴.c, .i, .s,等等,產生目標文件名.可以使用-o 選項選擇其他名字.GCC 忽略-c 選項后面任何無法識別的輸入文件(他們不需要編譯或匯編).

-S

編譯后即停止,不進行匯編.對于每個輸入的非匯編語言文件,輸出文件是匯編語言文件.

缺省情況下, GCC 通過用.o替換源文件名后綴.c, .i,等等,產生 目標文件名.可以使用-o 選項選擇其他名字.

GCC 忽略任何不需要編譯的輸入文件.

-E

預處理后即停止,不進行編譯.預處理后的代碼送往標準輸出.

GCC 忽略任何不需要預處理的輸入文件.

-o file

指定輸出文件為 file.該選項不在乎 GCC 產生什么輸出,無論是可執行文件,目標文件,匯編文件,還是預處理后的 C 代碼.

由于只能指定一個輸出文件,因此編譯多個輸入文件時,使用-o選項沒有意義,除非輸出一個可執行文件.
如果沒有使用-o選項,默認的輸出結果是:可執行文件為a.out, source.suffix的目標文件是source.o,匯編文件是 source.s,而預處理后的 C 源代碼送往標準輸出.

-v

(在標準錯誤)顯示執行編譯階段的命令.同時顯示編譯器驅動程序,預處理器,編譯器的版本號.

-pipe

在編譯過程的不同階段間使用管道而非臨時文件進行通信.這個選項在某些系統上無法工作,因為那些系統的 匯編器不能從管道讀取數據. GNU 的匯編器沒有這個問題.

GCC文件表

文件(FILE)格式含義
file.cC 源文件
file.hC 頭文件(預處理文件)
file.i預處理后的 C 源文件
file.CC++源文件
file.ccC++源文件
file.cxxC++源文件
file.mObjective-C 源文件
file.s匯編語言文件
file.o目標文件
a.out連接的輸出文件
TMPDIR/cc*臨時文件
LIBDIR/cpp預處理器
LIBDIR/cc1C 編譯器
LIBDIR/cc1plusC++編譯器
LIBDIR/collect某些機器需要的連接器前端(front end)程序
LIBDIR/libgcc.aGCC 子例程(subroutine)庫
/lib/crt[01n].o啟動例程(start-up)
LIBDIR/ccrt0C++的附加啟動例程
/lib/libc.a標準 C 庫,另見 intro (3)
/usr/include#include文件的標準目錄
LIBDIR/include#include 文件的標準 gcc 目錄
LIBDIR/g++-include#include 文件的附加 g++目錄
LIBDIR通常為/usr/local/lib/machine/version.
TMPDIR來自環境變量 TMPDIR (如果存在,缺省為/usr/tmp ,否則為 /tmp).

參考資料:

  • 《程序員的自我修養》
  • 程序員的自我修養——編譯和鏈接 CSDN
  • GCC中文手冊
  • 總結

    以上是生活随笔為你收集整理的GCC编译过程以及对应FILE文件表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。