Quelle est la différence entre les paramètres gcc `-fpic` et `-fPIC`?

j'ai déjà lu la page de manuel gcc , mais je ne peux toujours pas comprendre la différence entre -fpic et -fPIC . Quelqu'un peut m'expliquer, très simplement et de façon claire?


questions connexes:

79
demandé sur Community 2010-08-23 04:24:13

2 réponses

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

Utilisez -fPIC ou -fpic pour générer un code indépendant de la position. L'utilisation de -fPIC ou -fpic pour générer du code indépendant de la position dépend de la cible. Le choix -fPIC fonctionne toujours, mais peut produire plus de code que -fpic (mnénomique pour se rappeler que C'est que PIC est dans un plus grand cas, de sorte qu'il peut produire de plus grandes quantités de code.) L'utilisation de l'option -fpic génère habituellement du code plus petit et plus rapide, mais ses limites dépendent de la plate-forme, comme le nombre de symboles globalement visibles ou la taille du code. L'éditeur de liens vous dire si elle convient lorsque vous créez la bibliothèque partagée. Dans le doute, je choisis -fPIC , parce que ça marche toujours.

97
répondu Anycorn 2014-04-09 18:56:56

De la manuel de Gcc page :

lors de la génération du code pour les bibliothèques partagées, - fpic implique - msmall-data et-fPIC implique-mlarge-data.

où:

 -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.
8
répondu Alexandro de Oliveira 2018-06-15 12:24:23