C的静态库

符号和符号表

C程序员使用static属性隐藏块内部的变量和函数声明,就像你在java和C++
中使用public和private声明一样。

每个可重定位目标模块m都有一个符号表,它包含m定义和引用的符号的信息。
在连接器的上下文中,有三种不同的符号:
1)由模块m定义并能被其他模块引用的全局符号。
2)由其他模块定义并被模块m引用的全局符号。
3)只被模块m定义和应用的局部符号。static 

连接器如何解析多重定义的全局符号

函数和已初始化的全局变量是强符号,为初始化的全局变量是若符号
规则1:不允许有多个同名的强符号。
规则2:如果有一个强符号和多个弱符号同名,那么选择强符号
规则3:如果有多个弱符号同名,那么从这些弱符号

与静态库连接

实际上,所有的编译系统提供一种机制,将所有相关的目标模块打包称为一个单独的文件,
称为静态库(static library),它可以用做连接器的输入。
当连接器构造一个输出的可执行文件时,它只复制静态库里被应用程序引用的目标模块。

这种方法的有点是它将编译器的实现与标准函数的实现分离开来,并且仍然对程序员
保持适度的便利。

在Linux系统中,静态库以一种称为存档(archive)的特殊文件格式存放在磁盘中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值