В чем разница между кодом PIC и `ld -r`?
Я знаю, что оба они используются для создания кода, который можно разместить в разных местах, но как каждый из них работает и почему?
1 ответ
Решение
Для начала, они являются опциями для различных частей цепочки инструментов:
-fpic
а также-fPIC
являются опциями GCC, которые генерируют независимый от позиции код. Это влияет на действительные выбранные инструкции, чтобы код выполнялся независимо от того, где он находится в памяти. Это требует поддержки со стороны динамического загрузчика операционной системы, чтобы фактически сделать его работоспособным после загрузки.-r
это опция компоновщика, которая заставляет его испускать перемещаемый код, то есть код, который может быть снова связан позже. Это часть поддержки ld для добавочных ссылок.
Я думаю, что их использование не пересекается, вы можете создавать перемещаемый (библиотечный) код без использования ld -r
,