Я уже прочитал man-страницу gcc
, но я все еще не могу понять разницу между -fpic
и -fpic
. Может кто-нибудь объяснить это очень простым и понятным образом?
Похожие вопросы:
Я уже прочитал man-страницу gcc
, но я все еще не могу понять разницу между -fpic
и -fpic
. Может кто-нибудь объяснить это очень простым и понятным образом?
Похожие вопросы:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Используйте -fPIC
или -fPIC
для создания независимого от положения кода. Использовать ли -fPIC
или -fPIC
для создания независимого от позиции кода зависит от цели. Выбор -fPIC
всегда работает, но может генерировать более крупный код, чем -fPIC
(mnenomic, чтобы помнить, что PIC находится в большем случае, поэтому он может генерировать больший объем кода). Использование опции -fPIC
обычно генерирует меньший и быстрый код, но будет иметь зависящие от платформы ограничения, такие как количество отображаемых во всем мире символов или размер кода. Компонент скажет вам, подходит ли он при создании общей библиотеки. Когда сомневаюсь, я выбираю -fPIC
, потому что он всегда работает.
На странице Gcc manual:
При генерации кода для разделяемых библиотек -fpic подразумевает -msmall-data и -fPIC подразумевают -большие данные.
Где:
-msmall-data
-mlarge-data
When -mexplicit-relocs is in effect, static data is accessed via
gp-relative relocations. When -msmall-data is used, objects 8
bytes long or smaller are placed in a small data area (the
".sdata" and ".sbss" sections) and are accessed via 16-bit
relocations off of the $gp register. This limits the size of the
small data area to 64KB, but allows the variables to be directly
accessed via a single instruction.
The default is -mlarge-data. With this option the data area is
limited to just below 2GB. Programs that require more than 2GB
of data must use "malloc" or "mmap" to allocate the data in the
heap instead of in the program data segment.