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