Відповіді:
PIC означає Позиція Незалежний Код
і цитувати man gcc
:
Якщо підтримується цільова машина, випромінюйте незалежний від позиції код, придатний для динамічного зв’язку та уникнення будь-яких обмежень щодо розміру глобальної таблиці зміщення. Цей параметр значно впливає на m68k, PowerPC та SPARC. Незалежний від позиції код вимагає спеціальної підтримки, а тому працює лише на певних машинах.
використовувати це під час побудови спільних об'єктів (* .so) на згаданих архітектурах.
/usr/bin/ld: /tmp/cc7hXILq.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
так, що я додала fPIC і вона побудована.
The f
Є ПКУ префікс для опцій , які «керують умовності інтерфейсу , використовуваних в генерації коду»
Поняття PIC
"Код незалежності від позиції", це спеціалізаціяfpic
для m68K та SPARC.
Редагувати: Прочитавши сторінку 11 документа, на який посилається 0x6adb015 , і коментар coryan, я вніс кілька змін:
Цей параметр має сенс лише для спільних бібліотек, і ви повідомляєте ОС, що використовуєте глобальну таблицю зміщення, GOT. Це означає, що всі ваші посилання на адресу відносяться до GOT, і код можна ділити у багатьох процесах.
Інакше без цієї опції навантажувач повинен був би змінити всі компенсації.
Зайве говорити, що ми майже завжди використовуємо -fpic / PIC.
man gcc
каже:
-фікп Створіть незалежний від позиції код (PIC), придатний для використання в спільному доступі бібліотека, якщо вона підтримується для цільової машини. Такий код отримує доступ до всіх постійні адреси через глобальну таблицю зміщення (GOT). Динамічний завантажувач вирішує записи GOT при запуску програми (динамічний навантажувач не входить до складу GCC; це частина операційної системи). Якщо розмір GOT для пов’язаного виконуваного файлу перевищує конкретний для машини максимальний розмір, ви отримуєте повідомлення про помилку із вказувачем що -fpic не працює; у цьому випадку перекомпілюйте замість -fPIC. (Ці максимуми складають 8 к у SPARC та 32 к у m68k та RS / 6000. 386 не має такого обмеження.) Незалежний від позиції код вимагає спеціальної підтримки, а отже працює лише на певних машинах. Для 386 GCC підтримує PIC для Система V, але не для Сонця 386i. Код, згенерований для IBM RS / 6000 завжди не залежить від позиції. -fPIC Якщо це підтримується для цільової машини, випустіть незалежний від позиції код, підходить для динамічного зв'язку та уникнення будь-яких обмежень щодо розміру глобальна таблиця компенсацій. Цей параметр змінює значення на m68k і SPARC. Незалежний від позиції код вимагає спеціальної підтримки, а отже працює лише на певних машинах.