我正在尝试使用一些更简单的代码重现我遇到的问题。我编写了一个小脚本来生成一个如下所示的 C 文件:
int SYM_0 = 0;
int SYM_1 = 1;
int SYM_2 = 2;
int SYM_3 = 3;
int SYM_4 = 4;
.
.
.
int SYM_16384 = 16384;
int main() {
int sum = 0;
sum += SYM_0;
sum += SYM_1;
sum += SYM_2;
sum += SYM_3;
sum += SYM_4;
.
.
.
sum += SYM_16384;
return sum;
}
所以基本上 16385 个全局变量。当我现在用 -fpic 编译它时,它编译没有错误。但是,当我使用 -fPIC 编译时,我得到:
/tmp/ccCB1pty.s: Assembler messages:
/tmp/ccCB1pty.s:229412: Error: operand out of range (0x00008000 is not between 0xffff8000 and 0x00007fff)
我很困惑,因为根据我的阅读,-fPIC 应该允许最大数量的 GOT 条目,每个函数有 16k 个条目,其中 -fpic 总共有 16k 个条目。那么,为什么我会得到 fPIC 而不是 fpic 的错误?