我最近在构建一个针对x86-64架构的特定共享库(ELF),如下所示:
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
以下是该问题的错误信息:
重定位R_X86_64_32至“一个本地符号”时无法用于制作共享对象;请使用 -fPIC 重新编译
这意味着我需要将它重建为位置无关代码,以便可以链接到共享库中。
但是,使用完全相同的构建参数在x86上可以正常工作。所以问题是,x86与x86-64上的重定位有何不同,为什么在前者上我不需要使用 -fPIC
编译?