13_Linux第一個程式HelloWorld

爱吃冰激凌的黄某某發表於2024-03-10

Linux第一個程式HelloWorld

1.什麼是gcc?

gcc 全稱(gun compiler collection)既編譯套件,gcc 可以支援多種計算機體系結構,比如X86,MIPI,ARM。

Ubuntu 預設自帶gcc可以使用gcc -v 命令來檢視Ubuntu 的gcc

image-20240309230030072

2.gcc 基本用法

gcc 選項 檔名
舉例:gcc hello.c -o hello -o 引數為指定生成檔案的名字

image-20240309230109008輸入./hello 執行hello 檔案,./的意思為在當前目錄找我們的hello 檔案並執行。

image-20240309230114373如果我們不使用-o 引數指定我們生成檔案的名稱,直接輸入gcc hello.c 編譯完會得到一個a.out 檔案,執行這個a.out 的結構和執行hello 是一樣的。

image-20240309230121101file 命令:
功能:檢視檔案型別
格式:file 檔名

image-20240309230127245是用gcc 編譯器編譯出來的可執行檔案是X86 的,不能再arm 開發板上執行。可以使用file 命令來檢視檔案型別。

3.瞭解編譯細節

初學階段只需要瞭解這個流程,不用過多的研究從hello.c 編譯得到hello 或者a.out 要經歷四個步驟,預處理,編譯,彙編,連結。
hello.i 預處理得到的C 語言程式碼
hello.s 組合語言檔案
Hello.o 目標檔案。
第一個階段:預處理階段,編譯器會對標頭檔案或者宏定義進行展開,或者條件編譯的選擇
我們可以使用-E 引數得到預處理檔案
-E:只對檔案行預處理,不編譯和連結
使用gcc -E hello.c -o hello.i 得到預處理後的檔案

image-20240309230136826第二階段,編譯,把檔案編譯成彙編程式碼
-S 引數將hello.i 檔案編譯成hello.s 檔案

image-20240309230141706第三階段,彙編,把彙編檔案編譯機器碼
-c 引數可以把hello.s 檔案編譯成hello.o 檔案

image-20240309230146174第四階段,連結直接把目標檔案編譯成可以執行的檔案

image-20240309230159223連結分為靜態連結和動態連結,gcc 預設的是動態連結
特點:生成的程式下,但是需要依賴庫
靜態連結:使用-static 引數就是靜態連結,因為程式裡面包含了需要的庫,所以體積比較大。

image-20240309230203709

相關文章