O que é a flag -fPIC no GCC e por que ela é necessária ao compilar bibliotecas?
Olá a todos! Comecei a estudar C++ e estou tentando compilar uma biblioteca dinâmica (.so) no Linux usando GCC. Vejo em todos os lugares que ao compilar objetos para a biblioteca adicionam a flag -fPIC, mas não entendo por que ela é necessária.
Aqui está meu exemplo simples. Tenho o arquivo `math_utils.cpp`:
```cpp
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
```
Eu compilo assim:
```bash
g++ -c math_utils.cpp -o math_utils.o
g++ -shared math_utils.o -o libmath.so
```
E funciona! A biblioteca é criada, o programa a carrega e usa as funções. Mas se eu adicionar -fPIC:
```bash
g++ -c -fPIC math_utils.cpp -o math_utils.o
```
O resultado é o mesmo. Qual é a diferença? Quando pesquisei, dizem que sem -fPIC no x86_64 pode dar erro, mas aqui tudo compila. Expliquem, por favor, o que é Position Independent Code, e é obrigatório usar -fPIC para shared libraries? Existem casos em que não dá para evitar? Desde já agradeço!
<<>>
O que é
No answers yet.
Faça login para deixar uma resposta