我仍在努力理解动态链接和静态链接之间的核心区别,以下是我的教科书中的图片和示例代码:
/* main2.c */
#include <stdio.h>
#include "vector.h"
int x[2] = {1, 2};
int y[2] = {3, 4};
int z[2];
int main()
{
addvec(x, y, z, 2);
printf("z = [%d %d]\n", z[0], z[1]);
return 0;
}
和libvector.so只是一个提供main2.c所需定义的DLL
所以我的问题是:
为什么p2是“部分链接的可执行对象文件”?由于它被称为“部分链接”,因此它必须完成一些静态链接。但是由于此时libvector.so或libc.so的代码或数据段均未真正复制到可执行文件p2中。那么为什么p2仍然是“部分链接”的呢?静态链接不是从对象文件中复制代码和数据节,如果没有副本,那么就不涉及静态链接?
答案 0 :(得分:1)
部分链接的可执行文件将把.o
个目标文件(这里只有main.o
个)的所有全部链接在一起,并可能链接存根,重定位表等以便于动态化。链接。动态链接器仅在运行程序之前执行其余的“ n%”。