静态链接大家并不陌生,本文将从二进制代码来分析静态链接的本质。
首先列出将要静态的链接的两个源文件,它们分别是a.c和b.c,最后链接成功的文件为ab。
a.c代码如下:
extern int shared;
extern void swap(int * ,int *);
int main(){
int a = 100;
swap( &a, &shared );
}
b.c代码如下:
int shared = 1;
void swap( int* a, int* b )
{
*a ^= *b ^= *a ^= *b;
}
首先使用命令 gcc -c a.c 和 gcc -c b.c 生成可重定位文件a.o和b.o。
接着使用命令objdump -h a.o和objdump -h b.o来查看可重定位文件的各个基本段。
分别显示如下: