将位置独立代码放在静态库中会发生什么? (特别是在x86-64上)
也就是说:使用PIC生成多个.o
文件,并将其放在.a
文件中。这个.a
与正常的最终可执行文件静态链接。
这似乎有效,但这样做有意义吗?为什么呢?
最终地址计算是做什么的? (链接时间?运行时?)
谢谢
答案 0 :(得分:0)
PIC的整个想法是只需要一个表调整(GOT),而不是代码中的每个全局访问。
代码本身是位置无关的,因为它通过GOT访问,并且GOT的位置(相对于指令的地址)在最终链接期间被编码。
所以这是一个混合。有些是在最终链接(编码GOT偏移)期间完成的,有些是在启动时完成的(GOT重定位/修复),有些则没有完成(代码重定位)。