Avatar ·

Qu'est-ce que le flag -fPIC dans GCC et pourquoi est-il nécessaire lors de la compilation de bibliothèques ?

Bonjour à tous ! J'ai commencé à étudier le C++ et j'essaie de compiler une bibliothèque dynamique (.so) sous Linux avec GCC. Je vois partout qu'on ajoute le flag -fPIC lors de la compilation des objets pour la bibliothèque, mais je ne comprends pas à quoi il sert. Voici mon exemple simple. Il y a un fichier `math_utils.cpp` : ```cpp int add(int a, int b) { return a + b; } int multiply(int a, int b) { return a * b; } ``` Je compile comme ceci : ```bash g++ -c math_utils.cpp -o math_utils.o g++ -shared math_utils.o -o libmath.so ``` Et tout fonctionne ! La bibliothèque est créée, le programme la lie et utilise les fonctions. Mais si j'ajoute -fPIC : ```bash g++ -c -fPIC math_utils.cpp -o math_utils.o ``` Le résultat est le même. Quelle est la différence ? Quand j'ai cherché sur Google, on dit que sans -fPIC sur x86_64, il peut y avoir une erreur, mais chez moi tout se compile. Expliquez-moi, s'il vous plaît, ce qu'est le Position Independent Code, et est-il obligatoire d'utiliser -fPIC pour les shared libraries ? Y a-t-il des cas où on ne peut pas s'en passer ? Merci d'avance ! <<>>

Qu'est-ce que