PIC 代码和 ld -r 有什么区别?
What is the difference between PIC code and `ld -r`?
我知道两者都用于制作可放置在不同位置的代码,但它们如何工作,为什么?
对于初学者来说,它们是工具链不同部分的选项:
-fpic
and -fPIC
是生成位置无关代码的 GCC 选项。这会影响实际选择的指令,使代码 运行 无论它在内存中的位置如何。这需要操作系统的动态加载程序的支持才能真正使其 运行一旦加载就可用。
-r
是一个链接器选项,使它发出可重定位代码,即以后可以再次链接的代码。这是 ld 对增量链接的支持的一部分。
我认为它们的用法没有重叠,您可以在不使用 ld -r
的情况下创建可重定位(库)代码。
我知道两者都用于制作可放置在不同位置的代码,但它们如何工作,为什么?
对于初学者来说,它们是工具链不同部分的选项:
-fpic
and-fPIC
是生成位置无关代码的 GCC 选项。这会影响实际选择的指令,使代码 运行 无论它在内存中的位置如何。这需要操作系统的动态加载程序的支持才能真正使其 运行一旦加载就可用。-r
是一个链接器选项,使它发出可重定位代码,即以后可以再次链接的代码。这是 ld 对增量链接的支持的一部分。
我认为它们的用法没有重叠,您可以在不使用 ld -r
的情况下创建可重定位(库)代码。