我最近正在构建针对x86-64架构的特定共享库(ELF),如下所示:
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
失败并显示以下错误:
创建共享库时,不能使用针对“本地符号”的R_X86_64_32重定位;用-fPIC重新编译
当然,这意味着我需要将其重建为位置无关的代码,因此适合链接到共享库。
但这在具有完全相同的构建参数的x86上效果很好。所以问题是,x86上的重定位与x86-64有何不同?为什么我不需要-fPIC在前一个上进行编译?
-fPIC
我找到了一个很好而详细的解释,可以归结为: