我最近正在构建针对x86-64架构的特定共享库(ELF),如下所示:
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
失败并显示以下错误:
当然,这意味着我需要将其重建为位置无关的代码,因此它适合链接到共享库中。
但这在具有完全相同的构建参数的x86上效果很好。所以问题是,x86上的重定位与x86-64有何不同?为什么我不需要在前者上用
-fPIC
进行编译? 最佳答案
我发现a nice and detailed explanation可以归结为: