我知道两者都用于制作可放置在不同位置的代码,但每种方法如何工作,以及为什么?
答案 0 :(得分:2)
对于初学者来说,它们是工具链不同部分的选项:
-fpic
and -fPIC
是生成与位置无关的代码的GCC选项。这会影响所选的实际指令,使代码无论在内存中的位置如何都能运行。这需要操作系统的动态加载程序支持,以便在加载后实际运行。-r
是一个链接器选项,使其发出可重定位代码,即稍后可以再次链接的代码。它是ld支持增量链接的一部分。我认为它们的用法并不重叠,您可以在不使用ld -r
的情况下创建可重定位(库)代码。