在编译的时候,编译器并不知道swap的真正地址。 链接器在完成地址和空间分配之后,就可以确定所有符号的虚拟地址,那么链接器根据符号的 地址就能对需要重定位的指令进行地址修正,用objdump来反汇编输出可执行文件ab的汇编指令, ***图4.2.2*** ***图4.2.3*** 从图4.2.2可以看出在main函数中,两个需要重定位的部...
符号引用:在main.c程序中,“swap(&x,&y)”分别引用了符号“swap”、“x”以及“y”,这是符号引用;符号定义:在main.c和sub_fun.c中,语句“intx;”、“int y;”及“voidswap(int *x, int *y)”定义了符号x,y和swap,这是符号定义;在main.c中,语句“extern int y;”有符号解析的感觉。 (2) 输出...
静态链接器将多个可重定位的对象文件合并为一个单一的可执行对象文件。多个对象文件可以定义相同的符号,和连接器使用来默默地解决这些多个定义的规则可以引入用户程序中的细微 bug。可以在单个静态库串联多个对象文件。链接器使用库来解决其他对象模块中的符号引用。左到右顺序扫描许多连接器用来解析符号引用是混淆链接时错...