Quelle est la différence entre les parameters gcc `-fpic` et` -fPIC`?

J’ai déjà lu la page de manuel de gcc , mais je ne comprends toujours pas la différence entre -fpic et -fPIC . Est-ce que quelqu’un peut l’expliquer de manière très simple et claire?


Questions connexes:

  • Que signifie -fPIC signifie-t-il lors de la création d’une bibliothèque partagée?
  • Quelles sont, le cas échéant, les implications de la compilation d’objects avec l’indicateur gcc -fPIC s’ils sont utilisés dans des exécutables?

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

Utilisez -fPIC ou -fpic pour générer du code indépendant de la position. L’utilisation de l’ -fPIC ou -fpic pour générer un code indépendant de la position dépend de la cible. Le choix -fPIC fonctionne toujours, mais peut produire un code plus grand que -fpic (mnénomique à retenir, c’est que le PIC est dans un cas plus grand, donc il peut produire de plus grandes quantités de code). L’ -fpic option -fpic génère généralement un code plus petit et plus rapide, mais aura des limitations dépendantes de la plate-forme, telles que le nombre de symboles globalement visibles ou la taille du code. L’éditeur de liens vous indiquera s’il convient lorsque vous créez la bibliothèque partagée. En cas de doute, je choisis -fPIC , car cela fonctionne toujours.

De la page de manuel Gcc :

Lors de la génération de 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.