Что, если таковые имеются, являются последствиями компиляции объектов с флагом gcc -fPIC, если они используются в исполняемых файлах?

Я собираю make файл для проекта, над которым я работаю. У меня есть исполняемый файл и общая библиотека в проекте. Оба используют одни и те же исходные файлы, которые скомпилируются отдельно в объектные файлы. Чтобы использовать эти объекты в общей библиотеке, мне нужно использовать флаг -fPIC (position independent code) в gcc. Есть ли какие-либо последствия для компиляции объектов с -fPIC, которые используются в исполняемом файле?

Ответ 1

Компиляция независимого от позиции кода, если это не необходимо, - это перетаскивание производительности на некоторых платформах (в первую очередь, архитектура x86 с голодающим голосом, поскольку ПИК отнимает регистр, который может использоваться более свободно при отсутствии ПИК), но там в противном случае не будет никаких вредных последствий.

Далее, даже возможно создать независимый от позиции исполняемый файл (-fPIE), построенный из только независимого от позиции кода.

При этом libtool может автоматически создавать как объекты PIC, так и не-PIC для каждого исходного файла, который вы компилируете, и это должно быть легко сделать то же самое даже в системе сборки без интеграции libtool.