一、 以下是c程式一般的編譯過程:
從圖中看到:
將編寫的乙個c程式(源** )轉換成可以在硬體上執行的程式(可執行** ),需要進行編譯階段 和鏈結這兩個階段。
其中,1. 編譯階段先通過「編譯器 「把乙個 .c / .cpp 源** 編譯成 .s的彙編** ;再經過「彙編器 」 把這 個.s的彙編**彙編成 .o 的 目標**
2. 「聯結器 「 通過連線其他 .o **(如果需要的話) 庫檔案 和 1 中的.o 目標**生成可執行檔案
該檔案流被這三種程式(紅色)的加工,分別表現出四種形式(藍色) ,這就是c程式的編譯和鏈結過程。如果再詳細的話,編譯器在將原始檔編譯成彙編檔案的過程又分為:預處理階段(生成 .i**) 和 優化階段
二、c程式設計中的檔案字尾名介紹
.c 未經過預處理的c原始碼
.h c標頭檔案
.i 經過預處理的c原始碼 加入標頭檔案內容
.s 生成的組合語言** 文字格式的 低階機器語言指令
.o 編譯之後產生的目標檔案 二進位制檔案
*.h一般是我們手工生成的介面檔案,如果願意,也可在*.c完成後用gcc的選項-aux-info幫我們生成;
*.i是經過預處理後的原始碼,是由gcc在選項-e編譯下自動生成的檔案;
*.o是編譯後產生的目標檔案;
*.s是gcc在選項-s編譯下生成的組合語言**,對於效能要求很高的程式可以先生成組合語言檔案並對彙編做優化,然後用優化後的彙編生成目標檔案並鏈結
三演示 hello.c的編譯過程(linux 下 gcc)
本小節的演示都針對檔案 hello.c 進行
1. /*
2. * hello.c
3. */
4.5. #include
6. int main()
7.
1.生成預處理後的檔案 hello.i
$ gcc -e hello.c -o hello.i
2 .生成組合語言檔案 hello.s
$ gcc -s hello.i -o hello.s
3.生成目標檔案 hello.o
$ gcc -c hello.i
$ gcc -c hello.s
4. 生成可執行檔案
$ gcc -o hello hello.o
5. 執行及結果
$ ./hello
helloworld
當然也可以直接生成, $ gcc -c hello.c 就可以生成可執行檔案
C語言解析xml檔案遇到的乙個編譯問題
在用libxml2嘗試做解析xml檔案,編譯的時候出現了找不到標頭檔案的錯誤 nigelzeng myhost xml learning gcc o xml build xml build.c xml build.c 4 30 libxml xmlmemory.h 沒有那個檔案或目錄 xml bui...
關於C語言多個原始檔編譯成乙個程式
第一次用csdn的部落格,慕名而來,決定好好經營下自己的技術部落格。今天看 c和指標 中第二章程式設計訓練的第一題,就是關於c語言多個原始檔編譯成乙個程式的問題。之前自己一直都不太搞得懂這個,不過之前寫的程式都是簡單的,乙個原始檔就能搞定的那種,所以也一直懶了沒有去學怎麼,心裡隱隱的對學習心的東西感...
編譯第乙個檔案
apue中有很多例項,比如第4頁中圖1 3中描述了乙個簡單的類似ls命令的c程式。幾乎所有例子都會引用乙個apue.h標頭檔案。這個標頭檔案是作者自己實現的,起到遮蔽平台相關實現的作用。直接編譯圖1 3中的程式是沒法通過的,因為缺少apue.h這個標頭檔案。那該怎麼編譯這個例項呢?需要做下面幾件事情...