Avatar ·

GCC中的-fPIC标志是什么,为什么在构建库时需要它?

大家好!我开始学习C++,并尝试在Linux上使用GCC构建一个动态库(.so)。我到处看到在编译库的目标文件时会添加-fPIC标志,但我不明白为什么需要它。 这是我的简单示例。有一个文件 `math_utils.cpp`: ```cpp int add(int a, int b) { return a + b; } int multiply(int a, int b) { return a * b; } ``` 我这样编译: ```bash g++ -c math_utils.cpp -o math_utils.o g++ -shared math_utils.o -o libmath.so ``` 而且一切正常!库被创建,程序可以链接并使用这些函数。但如果我添加-fPIC: ```bash g++ -c -fPIC math_utils.cpp -o math_utils.o ``` 结果是一样的。有什么区别?我在网上搜索时,看到有人说在x86_64上不加-fPIC可能会出错,但我的编译没问题。请解释一下什么是Position Independent Code,以及是否必须为shared libraries使用-fPIC?有没有非用不可的情况?提前谢谢! <<>>

什么是