Почему gcc неявно предоставляет флаг -fPIC при компиляции статических библиотек в x86_64
У меня были многочисленные проблемы при компиляции общих объектов, которые статически связываются со статическими библиотеками. Эта проблема появляется только на платформах x84_64. При выполнении той же работы по компиляции на x86_32 у меня нет никаких проблем.
Возможно, это специфическая для ОС конфигурация GCC, но мои исследования показывают, что GCC работает на платформах x86_64. Во всяком случае, я использую gcc 4.4.3 на Ubuntu 10.04 x86_64.
Как решить проблему? ... Убедиться, что все зависимости статической библиотеки скомпилированы с -fPIC.
Вопрос 1: В чем разница между -fpic и -fPIC (очевидно, -fPIC генерирует больше инструкций на x86)? Почему более поздний тип более актуален в контексте x86_64?
Вопрос 2: Я предполагаю, что когда вы ссылаетесь на статический код, вы жестко встраиваете функции в ваш двоичный файл во время соединения, зачем ему нужен уровень косвенности, который обеспечивает механизм «позиционно-независимый код»?
Вопрос 3: Теперь, если x86 не нужен -fpic / -fPIC для связывания общих объектов со статическими архивами, зачем это нужно в x86_64?
Вопрос 4: даже если это необходимо, почему оно не предоставляется неявным образом? Я думал, что переломные изменения должны были быть большими нет-нет