1

我很困惑。我在 x86 上的 Linux 中尝试。

4

2 回答 2

2

PIC 只是让加载程序的运行更加简单,因为它只需要修改代码中的一些全局地址。非 PIC 代码只是包含更多这些地址,因此需要重定位的地址表更大。但是加载器必须能够在任何一种情况下重新定位代码(例如,解析静态/全局变量和所有函数指针的地址)。

于 2009-11-12T09:50:18.830 回答
1

x86 ABI 类型支持共享库中的非 PIC 代码。正如之前所指出的,这意味着通常会共享的页面将不会被共享(因为 ld.so 需要在代码相当特殊的地方(GOT)修补引用)。

但是以这种方式构建的库可能会更快一些,因为 PIC 代码通常较慢。

amd64 ABI 不支持。

于 2011-04-13T20:11:50.677 回答