-fPIC选项

-fPIC选项的生效阶段在编译阶段,使用-fPIC选项编译的.o文件会生成位置无关的代码通常在linux下用gcc编译动态库时都会加上一个-fPIC选项来生成位置无关代码。

如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项。

【下面说了啥,我也看不懂了,可以不看】
如果你的静态库可能会被动态库使用,那么静态库编译的时候就也需要-fPIC选项,原因如下:
众所周知,静态库其实是一系列.o文件的打包,将.o文件制作成静态库的过程是不会发生链接的。所以链接静态库就约等于将静态库解包后的.o文件一个一个全部链接。
如果一个动态库需要链接一个静态库,那么就相当于动态库去链接一系列的.o文件,而编译动态库所需的.o文件时一般是推荐使用-fPIC编译选项的。

参考:链接

具体的-fPIC是什么原理可以参考:动态库基本原理和使用方法,-fPIC选项的来龙去脉。-fPIC大概的原理就是:编译时构造全局偏移表(Global Offset Table, GOT),运行时通过GOT中存储的偏移值访问指令和数据。
更详细的解释可以参考:《程序员的自我修养》7.3章

posted @   好人~  阅读(2727)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-07-11 C++ opencv画框以及在框上设置标签
2022-07-11 不同的python程序使用不同的虚拟环境
2022-07-11 ./my_cmake_exe: error while loading shared libraries: libswresample.so.4: cannot open shared object file: No such file or directory
点击右上角即可分享
微信分享提示