鏈接
有兩個c文件:
/* main.c */
void swap();
int buf[2] = {1, 2};
int main()
{
swap();
return 0;
}
/* swap.c */
extern int buf[];
int *bufp0 = &buf[0];
int *bufp1;
void swap()
{
int temp;
bufp1 = &buf[1];
temp = *bufp0;
*bufp0 = *bufp1;
*bufp1 = temp;
}
要通過GNU編譯系統構造程序,我們可以在shell中輸入以下命令:
gcc -O2 -g -o p main.c swap.c
(1)驅動程序首先運行C預處理器(cpp),將C源程序翻譯成一個ASCII碼的中間文件main.i。
(2)接下來,驅動程序運行C編譯器(ccl),它將main.i翻譯成一個ASCII彙編語言文件 .s。
(3)然後,驅動程序運行彙編器,它將main.s翻譯成一個可重定位目標文件main.o。
(4)驅動程序經過相同的過程生成swap.o。最後,它運行鏈接器ld,將main.o和swap.o以及一系列的系統目標文件組合起來,創建一個可執行目標文件p。(-o爲命名參數)
在命令行中輸入./p時,shell調用操作系統中也各叫做加載器的函數,拷貝可執行文件p中的代碼和數據到存儲器,然後將控制轉移到這個程序的開頭。