C语音的预处理,编译,汇编,链接过程分析
生活随笔
收集整理的這篇文章主要介紹了
C语音的预处理,编译,汇编,链接过程分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語音的預處理,編譯,匯編,鏈接過程分析
1.C程序編譯分為以下幾步:
- 預處理 (生成 .i文件)
- 編譯(生成 .s文件)
- 匯編(生成 .o文件)
- 鏈接(生成 .exe文件)
2.通過圖解來理解編譯過程
3.通過Linux的gcc編譯C文件,并逐步分析:
vim test.c //Linux指令 //test.c只寫一個簡單的hello world #include<stdio.h> #include<stdlib.h> int main (){printf("hello world!!!\n");return 0; }//預處理過程 gcc -E test.c -o test.i //Linux指令 生成.i文件 ls //查看文件? 通過圖片我們可以知道我們預處理過程生成了test.i文件,現在我們再通過Linux指令查看其內容。
cat test.i //文本格式輸出內容 vim test.i //文本編輯器打開 //可以看到原來的include語句那里被大量其他的代碼代替 //這就是預處理過程,預處理過程會把include的頭文件引入到代碼頭部gcc -S test.i -o test.s //編譯過程(生成.s文件) vim test.s //打開看看內容? 這里記錄了變量等各種信息,這是通過編譯生成的匯編語言。后面需要通過匯編對其進行解釋,并生成目標文件。
gcc -c test.s -o test.o //匯編過程(生成.o文件,也就是目標文件) cat test.o //查看內容(會發現一堆亂碼) //只所有會生成一堆亂碼是因為這是.o文件已經是二進制文件,所有以文本輸出是一堆亂碼。 /*為什么已經是二進制文件了,還不能執行文件呢?這是因為這只是針對你編寫的C文件編譯出來的目標文件,并不是最終的可執行文件,要變成可執行文件,還需要本地的機器指令庫。而這個工作就是鏈接了。 */gcc test.o -o test //最后一步鏈接本地庫,最終會生成可執行文件(.exe文件)4.關于其他目標文件
? 在C中可以通過extern關鍵字,聲明一個外部全局變量或者函數。這些變量和函數可能會存在其他C文件中,所有,在鏈接過程會用到其他目標文件。因為編譯器是一單個C文件進行編譯的,所以在用其他C文件用的全局變量時必須把其他的C文件也編譯成目標文件并用鏈接器進行連接,才能使用到外部的全局變量。
為編譯器是一單個C文件進行編譯的,所以在用其他C文件用的全局變量時必須把其他的C文件也編譯成目標文件并用鏈接器進行連接,才能使用到外部的全局變量。
總結
以上是生活随笔為你收集整理的C语音的预处理,编译,汇编,链接过程分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java遍历文件目录
- 下一篇: 解决eclipse 中文乱码问题