Je connais le '-fPIC
'L'option a quelque chose à voir avec la résolution des adresses et l'indépendance entre les modules individuels, mais je ne suis pas sûr de ce que cela signifie vraiment. Peux-tu expliquer?
PIC signifie Position Independent Code
et pour citer man gcc
:
Si pris en charge pour la machine cible, émettez un code indépendant de la position, adapté à la liaison dynamique et évitant toute limite sur la taille de la table de décalage globale. Cette option fait une différence sur le m68k, PowerPC et SPARC. Le code indépendant de la position nécessite un support spécial et ne fonctionne donc que sur certaines machines.
utilisez-le lorsque vous créez des objets partagés (* .so) sur les architectures mentionnées.
f
est le préfixe gcc pour les options qui "contrôlent les conventions d'interface utilisées dans la génération de code"
Le PIC
signifie "Position Independent Code", c'est une spécialisation du fpic
pour m68K et SPARC.
Edit: Après avoir lu la page 11 du document référencé par 0x6adb015 , et le commentaire de coryan, j'ai fait quelques changements:
Cette option n'a de sens que pour les bibliothèques partagées et vous dites au système d'exploitation que vous utilisez une table de décalage globale, GOT. Cela signifie que toutes vos références d'adresse sont relatives au GOT, et le code peut être partagé entre plusieurs processus.
Sinon, sans cette option, le chargeur devrait modifier lui-même tous les décalages.
Inutile de dire que nous utilisons presque toujours -fpic/PIC.
man gcc
dit:
- fpic Générez un code indépendant de la position (PIC) adapté à une utilisation dans une bibliothèque partagée, si pris en charge pour la machine cible. Ce code accède à toutes les adresses constantes Via une table de décalage globale (GOT). Le chargeur dynamique Résout les entrées GOT au démarrage du programme (le chargeur dynamique Ne fait pas partie de GCC; il fait partie du système d'exploitation). Si La taille GOT pour l'exécutable lié dépasse une taille maximale spécifique à la machine , Vous obtenez un message d'erreur de l'éditeur de liens indiquant Que -fpic ne fonctionne pas; dans ce cas, recompilez avec -fPIC à la place. (Ces maximums sont 8k sur le SPARC et 32k sur le m68k et RS/6000. Le 386 a aucune limite.) Le code indépendant de la position nécessite un support spécial, et donc ne fonctionne que sur certaines machines. Pour le 386, GCC prend en charge PIC pour le système V mais pas pour le Sun 386i. Le code généré pour le IBM RS/6000 est toujours indépendant de la position. - fPIC S'il est pris en charge pour la machine cible , émet un code indépendant de la position, adapté à la liaison dynamique et évite toute limite sur la taille de la table de décalage globale. Cette option fait une différence sur le m68k et le SPARC . Le code indépendant de la position nécessite un support spécial, et donc Ne fonctionne que sur certaines machines.