Частично связан с динамическим соединением в C - PullRequest
0 голосов
/ 08 ноября 2018

Я все еще пытаюсь понять разницу между динамическими и статическими ссылками, ниже приведены картинка и пример кода из моего учебника:

/* 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 просто DLL, которая обеспечивает определение, необходимое для main2.c

enter image description here

Итак, мои вопросы:

Почему p2 является «частично связанным исполняемым объектным файлом»? Так как он называется «частично связанным», он должен был выполнить статическое связывание. Но поскольку ни один из разделов кода или данных из libvector.so или libc.so на самом деле не копируется в исполняемый файл p2. Так почему же p2 все еще «частично связан»? Разве статическое связывание не связано с копированием кода и разделов данных из файлов объектов, если нет копии, то не задействовано статическое связывание?

1 Ответ

0 голосов
/ 08 ноября 2018

Частично связанный исполняемый файл будет иметь все из .o объектных файлов (здесь только main.o), связанных вместе и, возможно, связывающих заглушки, таблицы перемещений и тому подобное для облегчения динамического связывания.Динамический компоновщик выполняет только оставшиеся n% перед запуском программы.

...