在這裡插入描述
三、gcc編譯c/c++的過程
通過命令gcc -v檢視當前的gcc版本:
gcc -v
如下所示:
當出現如下問題:
command 『gcc』 not found, but can be installed with:sudo apt install gcc
解決辦法:通過sudo apt install gcc
安裝gcc編譯器
gcc是乙個強大的工具集合,它包含了預處理器、編譯器、彙編器、鏈結器等元件。它會在需要的時候呼叫其他元件。
輸入檔案的型別和傳遞給gcc的引數決定了gcc呼叫具體的哪些元件。
對於開發者,它提供的足夠多的引數,可以讓開發者全面控制**的生成,這對嵌入式系統級的軟體開發非常重要。
gcc [選項] 檔名
選項
含義-v
檢視gcc編譯器的版本,顯示gcc執行時的詳細過程
-o [filename]
指定輸出檔名為file
-e只預處理,不會編譯、彙編、鏈結
-s只編譯,不會彙編、鏈結
-c編譯和彙編,不會鏈結
在vi/vim編輯器下編輯.c原始檔
#include
intmain()
編譯和執行:
gcc -o testgcc testgcc.c 一次編譯(忽略中間過程)
./testgcc 執行
乙個c/c++檔案要經過預處理(preprocessing)、編譯(compilation)、彙編(assembly)、和連線(linking)才能變成可執行檔案。hello.c → hello.i → hello.s → hello.o → hello預處理就是將要包含(include)的檔案插入原檔案中、將巨集定義展開、根據條件編譯命令選擇要使用的**,最後將這些**輸出到乙個「.i」檔案中等待進一步處理。
使用 -e 引數輸出檔案的字尾名為:".cpp"
gcc -e -o testgcc.cpp testgcc.c (預編譯)
使用wc命令比較預處理後的檔案與原始檔,對比兩個檔案的差異
wc testgcc.c testgcc.cpp
可以看到預處理之後的檔案相比原始檔變大了很多。
預處理檔案 → 彙編**
gcc -x cpp-output -s -o testgcc.s testgcc.cpp
直接編譯到彙編**:gcc -s hello.c
彙編** → 目標**
gcc -x assembler -c testgcc.s
使用彙編器生成目標**:
as -o testgcc.o testgcc.s
直接編譯成目標**:gcc -c testgcc.c彙編就是將第二步輸出的彙編**翻譯成符合一定格式的機器**,在linux系統上一般表現位elf目標檔案(obj檔案)。
目標** → 執行**
gcc -o testgcc testgcc.o
直接生成執行**:gcc -o testgcc testgcc.c鏈結就是將彙編生成的obj檔案、系統庫的obj檔案、庫檔案鏈結起來,最終生成可以在特定平台執行的可執行程式。
注:彙編**和執行**都屬於二進位制**
gcc 的高階選項:-wall 開啟所有的警告資訊
gcc -wall -o testgcc testgcc.c
gcc編譯系統
常用檔名字尾及其表示的檔案型別如下表 檔名字尾 檔案型別 cc 原始檔 i預處理後的 c 原始檔 ii預處理後的 c 原始檔 hc 或 c 標頭檔案 c cc cp cpp c cxx c 原始檔 s匯程式設計序檔案 s必須預處理的匯程式設計序檔案 o目標檔案 a靜態鏈結庫 so動態鏈結庫 預處理之...
Linux下編譯安裝GCC 4 9 2
先準備檔案 gcc 4.9.2.tar.bz2 mpfr 2.4.2.tar.gz mpc 0.8.1.tar.gz gmp 4.3.2.tar.bz2 m4 1.4.17.tar.xz 我將原始碼解壓到 root gcc目錄下了 習慣用root使用者登入,不是root使用者的可用su命令切換到ro...
Linux下gcc編譯過程例項講解
本次講解基於c 在ubuntu下編譯一段例項 詳細講解gcc的編譯過程。通過本教程,你將掌握linux下gcc編譯過程和原理。詳見我的部落格 linux下c c 編譯原理及過程 file main.c brief 測試 author zyf date 2020 12 09 23 28 20 vers...