Avatar ·

¿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