为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.o文件进行提前糅合呢?
我们来看个现象:
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文件进行提前糅合呢?相关推荐
- linux下静态库、动态库总结
一.基本概念 1.1.什么是库 在 windows 平台和 linux 平台下都大量存在着库. 本质上来说库是一种可执行的二进制代码(但不可以独立执行),可以被操作系统载入内存执行. 由 ...
- Linux 之三 静态库及动态库的编写和使用
最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...
- linux 动态库建立,浅析linux下静态库和动态库的建立和使用
在粤嵌学了很多知识,我们把常用的公用函数放在一起做成一个函数库,可以供其他程序共同使用,函数库本质上说,是一个可执行代码的二进制形式,可被操作系统载入内存执行.linux下的库分为两种:静态库,后缀名 ...
- Linux上静态库和动态库的编译和使用
linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只 ...
- 【Linux】静态库与动态库的生成及调用
一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别 1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...
- Linux中静态库和动态库(共享库)的区别
1. 静态库和动态库的制作过程区别 1.1 静态库的制作过程 详见博客:Linux中静态库的制作与使用 1.2 动态库的制作过程 详见博客:Linux中动态库(共享库)的制作与使用 2. 静态库和动态 ...
- 【Linux】Linux下静态库(.a)和动态库(.so)的制作和使用
如有错误,欢迎大家指正,感谢! 目录 一.程序工作过程简单介绍 1. 安装GCC 2. 源程序工作流程 3. 使用示例 4. gcc常用的编译参数选项 二.静态库的制作及使用 1. 库是 ...
- Linux之静态库与动态库20160706
所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源..so文件是共享库文件(动态 ...
- Linux下静态库(.a)和动态库(.so) 的生成与使用
" 很多崩溃其实都发生在安静里,你坐在那里一动不动,内心世界却已经坍塌粉碎,一地狼藉. " 关于库~ 作为开发者应该不陌生~ 经常会生成或使用一些库,包括.a和 ...
最新文章
- 替代TabActivity,底部菜单主框架搭建
- CentOS 7 安装 MySQL
- 两万字深度介绍分布式系统原理,一文入魂
- Java基础-学习笔记(五)——面向过程和面向对象的区别
- canal修改同步binlog日志位点
- 编程技能和做员工的技能——哪个更重要?
- 用户权限管理——DB设计篇
- data后缀文件解码_Java语法进阶13-文件、IO流
- jsp源码oracle数据库,JSP与oracle数据库交互案例
- Visual Studio 2005 Web Application Projects
- 如何访问云端的tcpserver_Swoole: TcpServer+SocketServer+EMQTT组合,实现基础设备控制
- jdbc与java数据库编程_JDBC与JAVA数据库编程
- matlab2c使用c++实现matlab函数系列教程-exp函数
- div html表格样式,table 表格 div + css 样式
- 分期手续费转换为年化利率
- YOLOv7官方开源 | Alexey Bochkovskiy站台,精度速度超越所有YOLO,还得是AB
- 小学计算机小知识,小学生电脑基础知识
- 10分钟认识低代码平台
- 计算机教师继续教育心得,教师继续教育学习心得体会范文(精选8篇)
- Spring Cloud——断路器Hystrix