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 !
<<>>