¿Qué es la bandera -fPIC en GCC y por qué es necesaria al compilar bibliotecas?
¡Hola a todos! Empecé a estudiar C++ y estoy intentando compilar una biblioteca dinámica (.so) en Linux con GCC. Veo por todas partes que al compilar objetos para la biblioteca se agrega la bandera -fPIC, pero no entiendo por qué es necesaria.
Aquí está mi ejemplo simple. Tengo el archivo `math_utils.cpp`:
```cpp
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
```
Compilo así:
```bash
g++ -c math_utils.cpp -o math_utils.o
g++ -shared math_utils.o -o libmath.so
```
¡Y funciona! La biblioteca se crea, el programa la enlaza y usa las funciones. Pero si agrego -fPIC:
```bash
g++ -c -fPIC math_utils.cpp -o math_utils.o
```
El resultado es el mismo. ¿Cuál es la diferencia? Cuando busqué en Google, dicen que sin -fPIC en x86_64 puede haber un error, pero a mí me compila todo. Expliquen, por favor, qué es Position Independent Code, y si es obligatorio usar -fPIC para shared libraries. ¿Hay casos en los que no se pueda prescindir de él? ¡Gracias de antemano!
<<>>
Qué es
No answers yet.
Inicia sesión para dejar una respuesta
Blogs
Conversiones entre sistemas numéricos y trabajo con números en cadenas