部分链接到C中的动态链接

时间:2018-11-08 06:37:48

标签: c linker dynamic-linking

我仍在努力理解动态链接和静态链接之间的核心区别,以下是我的教科书中的图片和示例代码:

/* 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

enter image description here

所以我的问题是:

为什么p2是“部分链接的可执行对象文件”?由于它被称为“部分链接”,因此它必须完成一些静态链接。但是由于此时libvector.so或libc.so的代码或数据段均未真正复制到可执行文件p2中。那么为什么p2仍然是“部分链接”的呢?静态链接不是从对象文件中复制代码和数据节,如果没有副本,那么就不涉及静态链接?

1 个答案:

答案 0 :(得分:1)

部分链接的可执行文件将把.o个目标文件(这里只有main.o个)的所有全部链接在一起,并可能链接存根,重定位表等以便于动态化。链接。动态链接器仅在运行程序之前执行其余的“ n%”。