В чем разница между параметрами -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потому что это всегда работает.

Со страницы руководства Gcc:

При генерации кода для разделяемых библиотек -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.
Другие вопросы по тегам