gcc和arm linux gcc的常用選項

2021-09-13 09:16:52 字數 2198 閱讀 2229

gcc和arm-linux-gcc的常用選項

gcc的使用方法:

gcc [選項] 檔名

我們日常生活中所說的編譯,其實包含(1)預處理,(2)編譯,(3)彙編,(4)鏈結這四部分

(1)預處理

c/c++原始檔中,以#號開頭的命令被稱為預處理命令,如包含命令「#linclude」,巨集定義命令「#define」,條件編譯命令"#if" "ifdef"等。預處理就是將要包含的檔案插入原檔案中,將巨集定義展開,根據條件編譯命令選擇要使用的**,最後將這些**輸出乙個「.i」檔案中等待進一步處理,預處理將用到arm-linux-cpp工具

(2)編譯

編譯就把c/c++**「翻譯」成為彙編,所使用的工具

(3)彙編

彙編就是將第二步輸出的彙編**翻譯成為符合一定格式的機器**,在linux系統上一般表現為elf目標檔案(obj檔案),用到的工具為arm-linux-as.

(4)鏈結

鏈結就是將彙編生成的obj檔案、系統庫的obj檔案、庫檔案鏈結起來,最終生成可以在特定平台執行的可執行程式。

gcc常用選項:

-v:檢視gcc編譯器的版本,顯示gcc執行時的詳細過程

-o place the output into

指定輸出檔名為file,這個名稱不能跟源檔名同名

-e preprocess only; do not compile, assemble or link

只預處理,不會編譯、彙編、鏈結(產生.i 檔案)

-s compile only; do not assemble or link

只編譯,不會彙編、鏈結(產生.s檔案)

-c compile and assemble, but do not link

編譯和彙編,不會鏈結(產生.o檔案)

gcc -v:檢視gcc編譯器的版本

方式1:

gcc hello.c 輸出乙個a.out,然後./a.out來執行該應用程式。

gcc -o hello hello.c 輸出hello,然後./hello來執行該應用程式。

方式2:

gcc -e -o hello.i hello.c(預處理)

gcc -s -o hello.s hello.i(彙編)

gcc -c -o hello.o hello.s(編譯)

gcc -o hello hello.o(鏈結)

.o:object file(obj檔案)

小結:1)輸入檔案的字尾名和選項共同決定gcc到底執行那些操作。

2)在編譯過程中,除非使用了-e、-s、-c選項(或者編譯出錯阻止了完整的編譯過程)

否則最後的步驟都是鏈結。

方式3:

gcc -c -o hello.o hello.c

gcc -o hello hello.o

gcc會對.c檔案預設進行預處理操作,-c再來指明了編譯、彙編,從而得到.o檔案

再通過gcc -o hello hello.o將.o檔案進行鏈結,得到可執行應用程式。

鏈結就是將彙編生成的obj檔案、系統庫的obj檔案、庫檔案鏈結起來,

最終生成可以在特定平台執行的可執行程式。

crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系統標準啟動檔案,

對於一般應用程式,這些啟動是必需的。

-lc:鏈結libc庫檔案,其中libc庫檔案中就實現了printf等函式。

gcc -v -nostdlib -o hello hello.o會提示因為沒有鏈結系統標準啟動檔案和標準庫檔案,而鏈結失敗。

這個-nostdlib選項常用於裸機/bootloader、linux核心等程式,因為它們不需要啟動檔案、標準庫檔案。

一般應用程式才需要系統標準啟動檔案和標準庫檔案。

裸機/bootloader、linux核心等程式不需要啟動檔案、標準庫檔案。

動態鏈結使用動態鏈結庫進行鏈結,生成的程式在執行的時候需要載入所需的動態庫才能執行。

動態鏈結生成的程式體積較小,但是必須依賴所需的動態庫,否則無法執行。

靜態鏈結使用靜態庫進行鏈結,生成的程式包含程式執行所需要的全部庫,可以直接執行,

不過靜態鏈結生成的程式體積較大。

gcc -c -o hello.o hello.c

gcc -o hello_shared hello.o

gcc -static -o hello_static hello.o

gcc和arm linux gcc的常用選項

gcc和arm linux gcc的常用選項 gcc的使用方法 gcc 選項 檔名 gcc常用選項 v 檢視gcc編譯器的版本,顯示gcc執行時的詳細過程 o place the output into 指定輸出檔名為file,這個名稱不能跟源檔名同名 e preprocess only do no...

簡單說明gcc和arm linux gcc的區別

首先了解一下編譯的過程 乙個原始檔經過gcc編譯器編譯後生成可執行檔案其實經歷了四個過程 預處理 pre processing 編譯 compiling 彙編 assembling 鏈結 linking 而gcc經過編譯後生成的可執行檔案 最後也就是一大堆機器碼 是在linux作業系統之上執行的,也...

arm linux gcc安裝和配置

第一次寫技術部落格,人家說專業人士應該有這素養,所以寫一下。廢話不多說,說一下今天的主題。1,安裝包放到資料夾 home share下之後輸入命令 tar zxvf 檔名解壓 解壓出來的資料夾文opt 就是因為這個,問題來了。一開始我是把這資料夾下的檔案複製到 opt資料夾下 cp a home s...