-fPIC选项的生效阶段在编译阶段,使用-fPIC选项编译的.o文件会生成位置无关的代码通常在linux下用gcc编译动态库时都会加上一个-fPIC选项来生成位置无关代码。
如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项。
【下面说了啥,我也看不懂了,可以不看】
如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项,原因如下:
众所周知,静态库其实是一系列.o文件的打包,将.o文件制作成静态库的过程是不会发生链接的。所以链接静态库就约等于将静态库解包后的.o文件一个一个全部链接。
如果一个动态库需要链接一个静态库,那么就相当于动态库去链接一系列的.o文件,而编译动态库所需的.o文件时一般是推荐使用-fPIC编译选项的。
参考:链接
具体的-fPIC是什么原理可以参考:动态库基本原理和使用方法,-fPIC选项的来龙去脉。-fPIC大概的原理就是:编译时构造全局偏移表(Global Offset Table, GOT),运行时通过GOT中存储的偏移值访问指令和数据。
更详细的解释可以参考:《程序员的自我修养》7.3章