gcc編譯幾個階段

2021-06-08 23:45:06 字數 2930 閱讀 9084

正文:編譯流程分析:

編譯分為幾個過程:

a:預處理

b:編譯

c:彙編

d:鏈結

以下分析,如何處理各個階段:

首先預處理階段:

目的就是要使include之中的內容編譯進去。並且用-e命令作用是進行檢視。作用是gcc的預處理過程結束後停止編譯

gcc指令的一般格式為 gcc[選項] 要編譯的檔案 [選項][目標檔案]

其中,目標檔案可以預設 gcc預設生成可執行檔案 命名編譯檔案.out

gcc -e hello.c -o hello.i

2.編譯階段 gcc -s hello.i -o hello.s

3.彙編階段就是生成二進位制**的時候 gcc -c hello.s -o hello.o

4.鏈結階段

在成功編譯後,就進入鏈結階段。函式庫的概念在這裡很重要

這個程式之中並沒有定義printf的函式實現、在預處理階段包含了stdio.h也只是函式的生命。而沒有定義函式的實現。系統吧函式的實現都被做到名為libc.so.6的函式檔案之中去了。在沒有特定的指出是。gcc就到系統預設的搜尋路徑/usr/lib下查詢

鏈結過程分為動態鏈結還有靜態鏈結兩種形式。靜態鏈結的檔案是.a的形式。動態鏈結的形式是.so的形式

libc.so.6就是動態鏈結庫,gcc一般都是預設使用的是動態鏈結庫

後面還要用到

gcc hello.o -o hello

./hello

總共有的步驟

gcc -e hello.c -o hello.i

gcc -s hello.i -o hello.s

gcc -c hello.s -o hello.o

gcc hello.o -o hello

./hello

條件講解

-c之編譯不鏈結 生成的是目標** .o檔案

-s之編譯不彙編生成的是彙編**

-e只進行預編譯。不做其他處理

-g在可執行程式中包含便準除錯資訊

-o file 把輸出檔案輸出到fill裡面

-v 列印出編譯器內部編譯過程的命令列資訊和編譯器的版本

-i dir 在標頭檔案的搜尋路徑列表中新增dir目錄

-l dir 在庫檔案的搜尋路徑列表中新增dir目錄

-static 鏈結靜態庫

-llibrary 連線名為library的庫檔案

linux之中標頭檔案預設放在/usr/include/目錄下。因此當使用者希望新增放置在其他位置的標頭檔案時候。就需要透過 -i dir選項來指定 這樣

eg gcc hello.c -i/root/workplace/gcc/ -o hello1

這樣gcc就可以執行正確結果了

注意事項include之中<>是表示在標準路徑之中搜尋檔案。而""是表示在本目錄之中搜尋檔案。所以也可以用"my.h" 從而就不用在寫-i的問題了

哈哈哈 以前c語言老師講過哈 沒有在意 。。沒想到 還挺有用的 我覺得他好強大啊

l-dir指定的是動態鏈結庫的路徑。需要注意的是

-i dir 還有 -l dir 都是指定路徑 沒有指定檔案。因此不能再路徑之中包含檔名

沒有看的:

gcc警告的問題

gcc優化選項

gcc體系結構相關選項

[root@localhost ~]# cd desktop

[root@localhost desktop]# gcc -e hello.c -o hello.i

gcc: hello.c:沒有那個檔案或目錄

gcc: 沒有輸入檔案

[root@localhost desktop]# gcc -e helllo.c -o helllo.i

[root@localhost desktop]# gcc -s helllo.i -o helllo.s

[root@localhost desktop]# gcc -c helllo.s -o helllo.o

[root@localhost desktop]# gcc helllo.o -o helllo

[root@localhost desktop]# helllo

bash: helllo: command not found

[root@localhost desktop]# ./helllo

//預設的尋找目錄是usr/bin 所以要入./

i like china[root@localhost desktop]#

[root@localhost desktop]# sl

bash: sl: command not found

[root@localhost desktop]# ls

gnome-terminal.desktop  helllo.i

helllo 

helllo.o

#helllo.c# 

helllo.s

helllo.c 

usrhelllo.c~ 

xorg-x11-server-xnest-1.3.0.0-17.fc7.i386.rpm

[root@localhost desktop]# ls

gnome-terminal.desktop  helllo.i

helllo 

helllo.o

#helllo.c# 

helllo.s

helllo.c 

usrhelllo.c~ 

xorg-x11-server-xnest-1.3.0.0-17.fc7.i386.rpm

[root@localhost desktop]# helllo

bash: helllo: command not found

[root@localhost desktop]# ./helllo

i like china[root@localhost desktop]# cd

GCC編譯四階段

linux下程式編譯的四個階段 預處理 編譯 彙編 鏈結 gcc gun c compiler 但現在不只侷限於c語言 預處理 preprocessing gcc e hello.c o hello.i e選項意思不曉得 1 在源程式中插入include包含的標頭檔案 2 巨集定義的替換 編譯 co...

程式編譯的幾個階段

程式編譯的過程中就是將使用者的文字形式的源 c c 轉化成計算機可以直接執行的機器 的過程。主要經過這麼幾個過程 1 編譯,由編譯器將c源 cpp 轉變成彙編 s 2 彙編,由彙編器將彙編 s 轉變成目標 o 3 鏈結,由鏈結器將 在執行過程用到的其他目標 和庫檔案鏈結成為乙個可執行程式也就是目標程...

程式編譯的幾個階段

程式編譯的過程中就是將使用者的文字形式的源 c c 轉化成計算機可以直接執行的機器 的過程。主要經過這麼幾個過程 1 編譯,由編譯器將c源 cpp 轉變成彙編 s 2 彙編,由彙編器將彙編 s 轉變成目標 o 3 鏈結,由鏈結器將 在執行過程用到的其他目標 和庫檔案鏈結成為乙個可執行程式也就是目標程...