目錄
第一:linuxgcc包含的c/c 編譯器gcc、cc、c 、g
第二:gcc特徵
第三:gcc的運行過程
第四:gcc選項
第五:gcc所遵守的部份約定規則
第一:linuxgcc包含的c/c 編譯器gcc、cc、c 、g
其中gcc和cc是一樣的,c 和g 是一樣的,通常c語言程式就用gcc編譯linux怎麼用gcc編譯linux怎麼用gcc編譯,c程式就用g 編譯。
第二:gcc特徵
gcc是一個可移植的編譯器,支援多種硬體平台。例如ARM、X86等等。
#gcc除了是個本地編譯器,它能夠跨平台交叉編譯。所謂的本機編譯器,是指編譯下來的程式只還能在本機環境進行運作。而gcc編譯下來的程式才能在其他平台運作。
gcc有多種語言後端,用來解析不同的語言另外gcc是依模組化設計的linux vi指令,可以加入新語言和新CPU架構的支援。 gcc是自由軟體。任何人都可以使用或修改這個軟體。
第三:gcc的運行過程
(1)在命令列輸入:gcctest.c
這樣會預設編譯出一個名為a.out的程序,
再在命令列輸入:./a.out
就可以運行程式。
(2)假如在命令列輸入:gcctest.c-otest
這樣將編譯出一個名為test的程式
再在命令列輸入:./test
就可以運行程式。
註:其中-o參數拿來指定生成程式的名子
(3)分步執行linux作業系統版本,更具體形象
其中包含4個過程:
1.預處理
本質會進行4個操作(包括頭檔的展開、去掉註解、巨集替換、條件編譯)、
具體操作:命令列輸入:gcc-Etest.c-otest.i
這句指令意思是:走完預處理第一步都會停出來,將形成的暫存內容儲存在test.i檔案中
####
2.編譯
本質就是把c語言弄成組合語言
具體操作:命令列輸入:gcc-Stest.i-otest.s
這句指令意思是:走完編譯第二步都會停出來,將形成的臨時內容儲存在test.s檔案中
3.彙編
本質就是把組合語言弄成目標二補碼檔(不可執行)
具體操作:命令列輸入:gcc-ctest.s-otest.o
這句指令意思是:走完彙編第三步都會停出來,將形成的臨時內容儲存在test.o檔案中
4.連結
#本質就是引入我們在程式碼中使用的第三方程式庫產生可執行檔或庫檔
(第三方函式庫由編譯器和檔案後綴共同決定)
第四:gcc選項
-E只進行預處理操作
-S編譯到組譯停止(不進行彙編,只完成預處理和編譯)
-c進行組譯操作(編譯到組譯程式碼)
-O[0,1,2,3]
最佳化程式(預設為2級最佳化,0不最佳化,3最佳化等級最高)
-static對產生的檔案採用靜態連結
##-shared盡量使用動態函式庫
-Idir
將dir目錄加入搜尋頭檔的目錄路徑
-Ldir
將dir目錄加入搜尋庫的目錄路徑
-llib
連接lib函式庫
-Wall使gcc對原始檔案的程式碼有問題的地方發出警告訊息
-W不發出警告訊息
-g在目標檔案中產生偵錯訊息,方便gdb之類的偵錯程式偵錯
以上是基於命令列輸入的c/c++編譯器運行過程的詳細內容。更多資訊請關注PHP中文網其他相關文章!