c語言的編譯過程

2021-09-01 01:09:34 字數 1344 閱讀 7166

先感謝這篇文章 介紹了ld的庫檔案怎麼引用的

**如下

----------------------- test.c-----------------------------

#include

void mian()

今天看了下編譯的過程,gcc –o test text.c   是一步到位的做法

要像一步一步做出來 了解怎麼編譯的,是這樣的

[root@localhost workspace]# cpp test.c test.i

得到了預處理檔案。

[root@localhost 4.1.1]# cc1 test.c  test.s

這裡就得到了編譯後的檔案

這裡cc1命令不一定在環境變數中,gcc -v hello.c 2>&1 |grep cc1  可以看到cc1在哪個目錄下執行的時候可以把test.c移到該資料夾下用./cc1

[root@localhost 4.1.1]# as -o test.o test.s

現在得到了彙編檔案

[root@localhost 4.1.1]# ld -dynamic-linker /lib/ld-linux.so.2 -o  test   /usr/lib/crt1.o     /usr/lib/crti.o   test.o   -lc     /usr/lib/crtn.o

得到了test

[root@localhost 4.1.1]# ./test

hello[root@localhost 4.1.1]# 

最終編譯完成了

下面是擴充套件  這篇文章對編譯有乙個具體的講述

這裡寫一點我的理解:1.

在命令列定義巨集:gcc -dmacro hello.c

等同於在檔案的開頭定義巨集,即#define maco,但是在命令列定義更靈活。例如,在源**中有這些語句。

#ifdef debug

printf("this code is for debugging/n");

#endif

如果編譯時加上

-ddebug

選項    (

要多加乙個d

),那麼編譯器就會把printf所在的行編譯進目標**,從而方便地跟蹤該位置的某些程式狀態。這樣

-ddebug就可以當作乙個除錯開關

,編譯時加上它就可以用來列印除錯資訊,發布時則可以通過去掉該編譯選項把除錯資訊去掉。

2

C語言的編譯過程

乙個源程式執行得到結果一般都要經過編譯和執行的過程,c語言的編譯和執行過程如下 編譯的過程 編譯的功能是將人們能看懂的高階語言,轉換成計算機能看懂的二進位制語言,可以分為下面的六個階段 乙個原始檔經過上述的6個過程即可轉化成目標 檔案,把高階語言轉化成機器語言。c語言編譯的完整過程如下圖 1 編譯預...

C語言的編譯過程

編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預處理 ...

C語言的編譯過程

編譯 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。流程 c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預...