链接 / 静态库 / 共享库

目标文件

  • 可重定位目标文件
  • 可执行目标文件
  • 共享目标文件
    Windows NT -> PE(可移植可执行)
    Unix -> ELF(可执行可链接)

静态链接

编译器生成可重定位目标文件 .o
链接器,将不同的可重定位文件,进行符号解析,重定位等操作。链接到一起。生成最终的可执行文件。
编译器生成的目标文件,从地址0开始。重定位操作,将不同的模块中的地址,与最终内存地址对应。

静态库 .a

将库文件拷贝,嵌入可执行文件中。链接发生在编译期间,程序运行之前。生成的最终程序中,包含所引用的静态库部分的一份拷贝。
这里写图片描述
缺点:
当静态库更新的时候,如果想使用新版本的库,必须重新链接。

共享库 .so .dll

动态连接器执行动态链接。
动态链接发生在执行期。编译生成的disk上的程序文件中并不含有共享库的代码。
程序执行时,共享库被加载到内存中的一个位置,所有使用共享库的程序都可以调用。
共享库生成的是位置无关代码PIC
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值