Почему может работать общая библиотека, созданная из не-pic объектов? - PullRequest
1 голос
/ 12 ноября 2009

Я в замешательстве. Я пытаюсь в Linux на x86.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

PIC просто упрощает работу загрузчика, так как ему нужно всего лишь изменить несколько глобальных адресов в коде. Код не PIC просто содержит намного больше этих адресов, поэтому таблица с адресами, которые необходимо переместить, больше. Но загрузчик должен иметь возможность перемещать код в любом случае (например, для разрешения адресов статических / глобальных переменных и всех указателей на функции).

1 голос
/ 14 апреля 2011

x86 ABI поддерживает не код PIC в разделяемых библиотеках. Как указывалось ранее, это означает, что страницы, которые обычно будут передаваться, не будут передаваться (поскольку ld.so должен исправлять ссылки в коде, а не в специальном месте (GOT)).

Но библиотеки, созданные таким образом, могут быть немного быстрее, потому что код PIC обычно медленнее.

amd64 ABI не поддерживает это.

...