分步編譯乙個C語言檔案

2022-08-04 10:33:09 字數 1376 閱讀 3926

一、 以下是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這個標頭檔案。那該怎麼編譯這個例項呢?需要做下面幾件事情...