В чем разница между параметрами -cc `-fpic` и`-fPIC`?
Я уже прочитал gcc
manpage, но я до сих пор не могу понять разницу между -fpic
а также -fPIC
, Может кто-нибудь объяснить это очень просто и понятно?
Смежные вопросы:
2 ответа
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
использование -fPIC
или же -fpic
генерировать независимый от позиции код. Ли использовать -fPIC
или же -fpic
для генерации позиционно-независимого кода зависит от цели. -fPIC
выбор всегда работает, но может дать больший код, чем -fpic
(Следует помнить, что PIC - это более крупный случай, поэтому он может генерировать большее количество кода). С помощью -fpic
option обычно генерирует меньший и более быстрый код, но будет иметь зависящие от платформы ограничения, такие как количество глобально видимых символов или размер кода. Компоновщик скажет вам, подходит ли он при создании общей библиотеки. Если сомневаюсь, я выбираю -fPIC
потому что это всегда работает.
При генерации кода для разделяемых библиотек -fpic подразумевает -msmall-data, а -fPIC подразумевает -mlarge-data.
Куда:
-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's data segment.
When generating code for shared libraries, -fpic implies
-msmall-data and -fPIC implies -mlarge-data.