我们来看个现象:

taoge@localhost Desktop> ar -vt /usr/lib/libc.a | grep printf.o
rw-r--r-- 399/399  28564 Oct 26 00:26 2010 vfprintf.o
rw-r--r-- 399/399    988 Oct 26 00:26 2010 vprintf.o
rw-r--r-- 399/399   1360 Oct 26 00:26 2010 reg-printf.o
rw-r--r-- 399/399    984 Oct 26 00:26 2010 fprintf.o
rw-r--r-- 399/399   1016 Oct 26 00:26 2010 printf.o
rw-r--r-- 399/399    972 Oct 26 00:26 2010 snprintf.o
rw-r--r-- 399/399    988 Oct 26 00:26 2010 sprintf.o
rw-r--r-- 399/399    992 Oct 26 00:26 2010 asprintf.o
rw-r--r-- 399/399    960 Oct 26 00:26 2010 dprintf.o
rw-r--r-- 399/399  27488 Oct 26 00:26 2010 vfwprintf.o
rw-r--r-- 399/399   1440 Oct 26 00:26 2010 fxprintf.o
rw-r--r-- 399/399   1308 Oct 26 00:27 2010 iovsprintf.o
rw-r--r-- 399/399    964 Oct 26 00:27 2010 fwprintf.o
rw-r--r-- 399/399    972 Oct 26 00:27 2010 swprintf.o
rw-r--r-- 399/399    992 Oct 26 00:27 2010 vwprintf.o
rw-r--r-- 399/399    996 Oct 26 00:27 2010 wprintf.o
rw-r--r-- 399/399   2524 Oct 26 00:27 2010 vswprintf.o
rw-r--r-- 399/399   1576 Oct 26 00:27 2010 vasprintf.o
rw-r--r-- 399/399   1356 Oct 26 00:27 2010 iovdprintf.o
rw-r--r-- 399/399   2480 Oct 26 00:27 2010 vsnprintf.o
rw-r--r-- 399/399   3212 Oct 26 00:27 2010 obprintf.o
taoge@localhost Desktop>

我们看到, 有这么多类似的.o库, 没有糅合在一个整体的.o库中, 这是为什么呢?

原因我们其实已经说了, 见http://blog.csdn.net/stpeace/article/details/52886361 《a.out/libTest.so静态链接了libme.a, 为什么存在于libme.a中的符号没有在a.out/libTest.so中出现?》

耦合越低, 链接到最终可执行文件中的库就越少。 如果放在一个大大的.o中, 那么调用printf的时候, 就把其他类printf函数库(如vfprintf.o、vprintf.o等)都链接进去了, 浪费时间, 浪费空间,  没有必要。

OK, 本文先说到这里了。

为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.o文件进行提前糅合呢?相关推荐

  1. linux下静态库、动态库总结

    一.基本概念 1.1.什么是库        在 windows 平台和 linux 平台下都大量存在着库. 本质上来说库是一种可执行的二进制代码(但不可以独立执行),可以被操作系统载入内存执行. 由 ...

  2. Linux 之三 静态库及动态库的编写和使用

      最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...

  3. linux 动态库建立,浅析linux下静态库和动态库的建立和使用

    在粤嵌学了很多知识,我们把常用的公用函数放在一起做成一个函数库,可以供其他程序共同使用,函数库本质上说,是一个可执行代码的二进制形式,可被操作系统载入内存执行.linux下的库分为两种:静态库,后缀名 ...

  4. Linux上静态库和动态库的编译和使用

    linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只 ...

  5. 【Linux】静态库与动态库的生成及调用

    一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别          1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...

  6. Linux中静态库和动态库(共享库)的区别

    1. 静态库和动态库的制作过程区别 1.1 静态库的制作过程 详见博客:Linux中静态库的制作与使用 1.2 动态库的制作过程 详见博客:Linux中动态库(共享库)的制作与使用 2. 静态库和动态 ...

  7. 【Linux】Linux下静态库(.a)和动态库(.so)的制作和使用

    如有错误,欢迎大家指正,感谢! ​​​​​​​目录 一.程序工作过程简单介绍 1. 安装GCC 2. 源程序工作流程 3. 使用示例 4. gcc常用的编译参数选项 二.静态库的制作及使用 1. 库是 ...

  8. Linux之静态库与动态库20160706

    所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源..so文件是共享库文件(动态 ...

  9. Linux下静态库(.a)和动态库(.so) 的生成与使用

    "   很多崩溃其实都发生在安静里,你坐在那里一动不动,内心世界却已经坍塌粉碎,一地狼藉.         " 关于库~ 作为开发者应该不陌生~ 经常会生成或使用一些库,包括.a和 ...

最新文章

  1. 替代TabActivity,底部菜单主框架搭建
  2. CentOS 7 安装 MySQL
  3. 两万字深度介绍分布式系统原理,一文入魂
  4. Java基础-学习笔记(五)——面向过程和面向对象的区别
  5. canal修改同步binlog日志位点
  6. 编程技能和做员工的技能——哪个更重要?
  7. 用户权限管理——DB设计篇
  8. data后缀文件解码_Java语法进阶13-文件、IO流
  9. jsp源码oracle数据库,JSP与oracle数据库交互案例
  10. Visual Studio 2005 Web Application Projects
  11. 如何访问云端的tcpserver_Swoole: TcpServer+SocketServer+EMQTT组合,实现基础设备控制
  12. jdbc与java数据库编程_JDBC与JAVA数据库编程
  13. matlab2c使用c++实现matlab函数系列教程-exp函数
  14. div html表格样式,table 表格 div + css 样式
  15. 分期手续费转换为年化利率
  16. YOLOv7官方开源 | Alexey Bochkovskiy站台,精度速度超越所有YOLO,还得是AB
  17. 小学计算机小知识,小学生电脑基础知识
  18. 10分钟认识低代码平台
  19. 计算机教师继续教育心得,教师继续教育学习心得体会范文(精选8篇)
  20. Spring Cloud——断路器Hystrix

热门文章

  1. SATA硬盘和U盘能否热插拨
  2. Android 高仿微信支付键盘
  3. RF基础(一) RF内建函数库BuiltIn
  4. JAVA 下的 pgp加密解密示例
  5. find7 android 5,5.5英寸四核芯 OPPO Find 7轻装版评测
  6. windows如何打开.key keynote文件
  7. BLUES吉他学习笔记004 bluesrv[8]
  8. 蓝牙耳机怎么挑选?鹏鹏数码盘点2023口碑蓝牙耳机排行榜
  9. 快手也抢先字节出手了…
  10. VIBE:3D人体姿态预测项目复现笔记