博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Chap-4 Section 4.5 静态库链接
阅读量:4684 次
发布时间:2019-06-09

本文共 795 字,大约阅读时间需要 2 分钟。

4.5 静态库链接

一个静态库可以看成是是一组目标文件的集合,即很多目标文件经过压缩打包后形成
的一个文件。比如我们在Linux中最长使用的C语言静态库libc位于/usr/lib/i386-linux-gnu
目录下,它属于glibc项目的一部分。glibc本身是用C语言开发的,它由成千上百个C语言源代码
文件组成,编译完成后有相同数量的目标文件,比如输入输出printf.o,scanf.o;文件操作
有fread.o,fwrite.o;时间日期有date.o,time.o;内存管理有malloc.o,把这些零散的目标
文件直接提供给库的使用者,很大程度上会造成文件传输、管理和组织方面的不便,于是
使用ar压缩程序将这些目标文件压缩在一起,并且对其进行标号和索引,便于查找和检索,
就行成了libc.a这个静态文件,我们可以用ar -t libc.a来查看这个静态库文件包含那些
目标文件,如图4.2.17所示:

***图4.2.17***
我们仅仅列出了libc.a中部分目标文件。

为什么静态库里面一个目标文件只包含一个函数?比如libc,a里面printf.o只有printf()函数,

strlen.o里面只有strlen()函数,为什么要这样组织?
我们知道,链接器在链接静态库的时候是以目标文件为单位的,比如我们引用静态库中的
printf()函数,那么链接器就会把库中包含printf()函数的那个目标文件链接进来。如果很多
函数都放在一个目标文件中,很可能很多没用的函数都被一起链接进输出的目标文件中。由于
运行库有成千上百个函数,数量非常庞大,每个函数独立地放在一个目标文件中可以尽量减少
空间的浪费,那些没有被用到的目标文件就不会被链接进最终的目标文件中。

 

转载于:https://www.cnblogs.com/miaoyong/p/3508087.html

你可能感兴趣的文章
maven使用阿里镜像配置文件
查看>>
iOS开发UI篇—UITableview控件使用小结
查看>>
lesson1 预备知识
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>
P2709 小B的询问
查看>>
润乾报表 动态控制文本的显示
查看>>
[oracle] 如何使用myBatis在数据库中插入数据并返回主键
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
UML-画类图与交互图的顺序
查看>>
6月7 考试系统
查看>>
mysql 基本操作
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
HTC Sensation G14开盒
查看>>