В чем разница между параметрами -cc `-fpic` и` -fPIC`? - PullRequest
87 голосов
/ 23 августа 2010

Я уже прочитал справочную страницу gcc, но до сих пор не могу понять разницу между -fpic и -fPIC. Может кто-нибудь объяснить это очень просто и ясно?


Похожие вопросы:

Ответы [ 2 ]

101 голосов
/ 23 августа 2010

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

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

13 голосов
/ 05 июня 2017

Со страницы руководства 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.
...