【发布时间】:2012-07-24 17:38:43
【问题描述】:
将位置无关代码放入静态库时会发生什么? (特别是在 x86-64 上)
也就是说:用PIC生成几个.o文件,放在一个.a文件中。这个.a 像往常一样静态链接到最终的可执行文件中。
这似乎可行,但这样做有意义吗?为什么?
最后的地址计算是怎么做的? (链接时间?运行时间?)
谢谢
【问题讨论】:
标签: linker solaris x86-64 relocation fpic
将位置无关代码放入静态库时会发生什么? (特别是在 x86-64 上)
也就是说:用PIC生成几个.o文件,放在一个.a文件中。这个.a 像往常一样静态链接到最终的可执行文件中。
这似乎可行,但这样做有意义吗?为什么?
最后的地址计算是怎么做的? (链接时间?运行时间?)
谢谢
【问题讨论】:
标签: linker solaris x86-64 relocation fpic
PIC系统中的IIRC所有全局变量都将通过PIC访问。
PIC 的整体理念是只需要调整一个表(GOT),而不是代码中的每个全局访问。
代码本身是位置无关的,因为它通过 GOT 访问,并且 GOT 的位置(相对于指令的地址)在最终链接期间被编码。
所以这是一个混合体。有些是在最终链接期间完成的(编码 GOT 偏移),有些是在启动时完成的(GOT 重定位/修复),还有一些没有完成(代码重定位)。
【讨论】: