我最近正在构建一个针对 x86-64 架构的某个共享库 (ELF),如下所示:
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
这失败并出现以下错误:
制作共享对象时,不能使用针对“本地符号”的重定位 R_X86_64_32;使用 -fPIC 重新编译
当然,这意味着我需要将它重新构建为与位置无关的代码,因此它适合链接到共享库中。
但这在具有完全相同构建参数的 x86 上运行良好。所以问题是,x86 上的重定位与 x86-64 有何不同,为什么我不需要-fPIC
在前者上编译?