静态库中的fPIC代码:为什么?怎么了?

时间:2012-07-24 17:38:43

标签: linker solaris x86-64 relocation fpic

将位置独立代码放在静态库中会发生什么? (特别是在x86-64上)

也就是说:使用PIC生成多个.o文件,并将其放在.a文件中。这个.a与正常的最终可执行文件静态链接。

这似乎有效,但这样做有意义吗?为什么呢?

最终地址计算是做什么的? (链接时间?运行时?)

谢谢

1 个答案:

答案 0 :(得分:0)

PIC系统中的IIRC将通过PIC访问所有全局变量。

PIC的整个想法是只需要一个表调整(GOT),而不是代码中的每个全局访问。

代码本身是位置无关的,因为它通过GOT访问,并且GOT的位置(相对于指令的地址)在最终链接期间被编码。

所以这是一个混合。有些是在最终链接(编码GOT偏移)期间完成的,有些是在启动时完成的(GOT重定位/修复),有些则没有完成(代码重定位)。