您的位置:首页 > 理论基础

《深入理解计算机系统》读书笔记——第七章 链接

2016-10-13 22:02 225 查看
 链接

有两个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中的代码和数据到存储器,然后将控制转移到这个程序的开头。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息