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

时间:2016-11-23 14:44:48

标签: c ld relocation position-independent-code

我知道两者都用于制作可放置在不同位置的代码,但每种方法如何工作,以及为什么?

1 个答案:

答案 0 :(得分:2)

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

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

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