[devel] -fpic & -shared
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Чт Дек 27 13:12:08 MSK 2007
On Thu, Dec 27, 2007 at 12:54:20PM +0300, Alexey Tourbin wrote:
> > Вам не кажется, что если бы я обладал квалификацией С программиста
> > достаточной, чтобы разобраться в этом коде, то вопросов уровня "а с какими
> > опциями можно компилировать библиотеки" у меня бы не возникало впринципе?
>
> Можно ещё прочитать dsohowto.pdf. Если комплиировать *.o без -pic и
> компоновать -shared, то будут так называемые text relocations.
На пальцах, это означает, что бинарный код библиотеки будет сформирован
таким образом, что как бы "статические" адреса переходов прошиты в сам
этот код. Посольку в виртуальную память процесса библиотека загружается
по заранее неизвестному адресу, то это означает, что рантайм-линкер
ld.so будет "по живому" править исполняемый код библиотеки (подменять
адреса перехода по некоему смещению относительно адреса, куда
загрузилась библиотека).
При формировании бинарного кода через -pic создаётся дополнительный
уровень косвенности переходов, так что линкеру нужно будет поправить
адреса всего примерно "в одном месте".
С исполняемыми файлами такой проблемы нет, поскольку они загружаются
линкером по константному адресу.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20071227/bd37aa85/attachment-0002.bin>
Подробная информация о списке рассылки Devel