《深入理解計算機系統》讀書筆記——第七章 鏈接

 鏈接


有兩個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中的代碼和數據到存儲器,然後將控制轉移到這個程序的開頭。

發佈了64 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章