- 來一句hello world
# vim hello.c
#include<stdio.h>
int main()
{
printf("hello world \n");
return 0;
}
- 編譯器翻譯過程
gcc -o hello hello.c
# gcc編譯器驅動程序讀取hello.c,
#將其翻譯成可執行的目標文件 hello
- 流程圖
解釋:
- 預處理階段:
hello.c 通過 cpp 改寫爲 hello.i ,將頭文件 #include<stdio.h>
引入程序當中。 - 編譯階段:
將 hello.i 文件改寫爲彙編 hello.s - 彙編階段:
將 hello.s 翻譯成 機器語言 hello.o
重定位目標文件是彙編器 使用編譯器輸出的彙編語言輸出的二進制目標文件, 要知道目標文件使用的是相對物理(內存)地址,重定位的目的就是變相對物理地址到絕對物理地址。 - 鏈接階段:
這是一種節約內存的編程機制,有兩種方法實現,一種是靜態另一種就是動態(dll)。
一些通用的函數(如 printf )是系統自帶的,如果某段程序需要調用則直接從系統拿即可。
總結:
編譯—》運行
就是將一個程序翻譯成不同程序表現的過程。
c 語言 -> 彙編 -> 機器語言
ps: 反彙編
機器語言 -> 彙編