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...