GCC编译静态库的-fPIC选项

背景

通常在linux下用gcc编译动态库时都会加上一个-fPIC选项来生成位置无关代码,但是从来没有人明确的说过是不是要在编译静态库时也加上-fPIC选项。我在这篇文章中就给出一个明确的结论并讲述原理。

介绍-fPIC的原理的文章网上汗牛充栋这里不再赘述。

原理分析

众所周知,静态库其实是一系列.o文件的打包,将.o文件制作成静态库的过程是不会发生链接的。
所以链接静态库就约等于将静态库解包后的.o文件一个一个全部链接。

-fPIC选项的生效阶段在编译阶段,使用-fPIC选项编译的.o文件会生成位置无关的代码

如果一个动态库需要链接一个静态库,那么就相当于动态库去链接一系列的.o文件,而编译动态库所需的.o文件时一般是推荐使用-fPIC编译选项的。

结论

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

GCC编译静态库的-fPIC选项相关推荐

  1. GCC编译静态库和动态库

    2019独角兽企业重金招聘Python工程师标准>>> 一.动态库的编译和使用 //hello.c #include<stdio.h> void hello() {pri ...

  2. linux c 如何编译静态库,Linux C 编程入门之一:gcc 编译动态库和静态库

    主调用程序源代码3-1:main.c /** * main.c */ #include #include #include "hello_fn.h" int main () { h ...

  3. gcc创建静态库和共享库

    静态库和动态(共享)库 静态库:编译程序在编译使用库提供的功能代码的程序时将代码复制到该程序然后编译成可执行程序,这种库成为静态库 共享库:共享库比静态库的处理方式更加灵活,因而其产生的可执行文件更小 ...

  4. Makefile、多Makefile编译静态库、动态库、SRC实例总结

    静态库生成及使用 calc.h #ifndef __MY_LIB_H__ #define __MY_LIB_H__ int add(int a, int b); #endif calc.c #incl ...

  5. GCC生成静态库和动态库

    目录 1)阅读.理解和学习材料"用gcc生成静态库和动态库.pdf"和"静态库.a与.so库文件的生成与使用.pdf",请在Linux系统(Ubuntu)下如实 ...

  6. Ubuntu下gcc的静态库与动态库的生成与使用

    目录 LInux中函数库的类型 一.用gcc生成.a静态库 1.编辑生成例子程序 hello.h .hello.c和main.c 2.将hello.c编译成.o文件 3.由.o文件创建静态库 4.在程 ...

  7. 用 gcc生成静态库和动态库以及静态库和动态库的使用

    文章目录 一.linux下gcc生成静态库和动态库以及库文件的使用 1.准备过程 2.静态库的创建及使用 (1)创建静态库 (2)程序中使用静态库 3.动态库的创建及使用 (1)创建动态库 (2)程序 ...

  8. gcc生成静态库.a和动态库.a以及Ubuntu18.04下opencv3.4.11安装及示例

    目录 一.用gcc生成静态库和动态库 (一)hello示例使用库 1.准备过程 2.静态库使用 3.动态库的使用 4.静态库与动态库比较 (二)示例1使用库 二.opencv安装以及使用 (一)认识o ...

  9. gcc生成静态库和动态库,以及OpenCV3.4.11的安装和实例

    文章目录 一.用gcc生成静态库和动态库 (1).hello使用库实例 1.创建目录并编写hello代码 2.gcc编译得到.o文件 3.静态库的使用 4.动态库的使用 5.静态库与动态库的对比 (2 ...

最新文章

  1. 本田da屏怎么进wince系统_东风本田LIFE“来福酱”上市
  2. twitter storm源码走读之2 -- tuple消息发送场景分析
  3. RxJS异步编程的简介
  4. Iper3打流时所支持的UDP协议是真的UDP吗?
  5. 浅析浏览器 Web 视频播放器
  6. 搞技术的人生技巧——装贪财
  7. php自动计算增长率,Oracle表空间增长率监控脚本
  8. 【转】奇文共欣赏,疑义相与析:原文转载《电脑维护技巧》(N条举措N条理由)并请大家交流研讨...
  9. 各种格式的文件用什么软件打开
  10. 真的存在“对事不对人”吗?
  11. 微信小程序 - <image>图片 src 路径动态拼接多个变量
  12. python selenium+Firefox 模拟浏览器操作
  13. 2004度精华软件总结
  14. Bose700降噪体验
  15. Tensorflow MobileNet移动端迁移学习指南
  16. 微信和平精英服务器怎么填,和平精英微信游戏名片怎么设置?微信游戏名片设置方法一览[多图]...
  17. OpenStack物理资源虚拟化比率设置
  18. 奢侈品行业数字化也要保持优雅
  19. BZOJ [Ahoi2008]Meet 紧急集合
  20. IT市场:英文求职信模板四

热门文章

  1. AWS ELB技术要点
  2. IO编程,真的很简单
  3. 联想服务器怎么使用uefi启动不了系统,联想小新如何用uefi启动在win10下装win7系统...
  4. C语言:srand函数与rand函数的使用(纯干货)【易懂】
  5. Photoshop CS2 视频教程-PS锁定图层(转)
  6. ExecutorService,Executors 使用
  7. VMware安装WinXP蓝屏及激活
  8. 小米手机连接校园网无法跳转到登录界面
  9. linux的systemctl命令介绍
  10. 【计算机网络】IPv6