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