PIC 代码和 ld -r 有什么区别?

What is the difference between PIC code and `ld -r`?

我知道两者都用于制作可放置在不同位置的代码,但它们如何工作,为什么?

对于初学者来说,它们是工具链不同部分的选项:

  • -fpic and -fPIC 是生成位置无关代码的 GCC 选项。这会影响实际选择的指令,使代码 运行 无论它在内存中的位置如何。这需要操作系统的动态加载程序的支持才能真正使其 运行一旦加载就可用。
  • -r 是一个链接器选项,使它发出可重定位代码,即以后可以再次链接的代码。这是 ld 对增量链接的支持的一部分。

我认为它们的用法没有重叠,您可以在不使用 ld -r 的情况下创建可重定位(库)代码。