Недавно я создал определенную общую библиотеку (ELF) для архитектуры x86-64, например:
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
Не удалось выполнить следующую ошибку:
перемещение R_X86_64_32 против "локального символа" не может использоваться при создании общего объекта; перекомпилировать с помощью -fPIC
Конечно, это означает, что мне нужно перестроить его как независимый от позиции код, поэтому он подходит для привязки к общей библиотеке.
Но это отлично работает на x86 с точно такими же аргументами построения. Итак, вопрос в том, как перемещение на x86 отличается от x86-64 и почему мне не нужно компилировать с -fPIC
в первом?