【发布时间】:2014-01-05 09:38:09
【问题描述】:
在 gcc 目标机器上,当想要编译共享库时,需要指定 -fpic 或 -fPIC 才能使事情正常工作。这是因为默认使用绝对寻址,这适用于完全控制自己的地址空间的可执行文件,但不适用于可以加载到可执行文件地址空间的任何位置的共享库。
然而,现代内核现在正在实施地址空间随机化,并且许多现代架构支持 PC 相对寻址。这一切似乎使绝对寻址要么不可用(地址空间随机化)要么不需要(PC相对寻址)。
我还注意到 clang 没有 -fPIC 选项,这让我认为它不再需要。
那么 -fPIC 现在是多余的还是需要生成单独的 .o 文件,一个用于静态库,一个用于共享库?
【问题讨论】: