博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链接与加载过程中,几个关键的概念
阅读量:5917 次
发布时间:2019-06-19

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

http://www.cnblogs.com/qiaoconglovelife/p/5870000.html

  • 加载(load)

    • 将程序拷贝到存储器并运行的过程,由加载器(loader)执行。
  • 链接分类

    • 编译时(compile time)链接:也称为传统静态链接、静态链接;
    • 加载时(load time)链接:在程序被加载的时候动态链接共享库;
    • 运行时(run time)链接:在程序运行时根据需要动态链接共享库。
  • 目标文件

    • 可重定位目标文件:可被链接生成可执行目标文件;
    • 可执行目标文件:可被直接拷贝至存储器中运行;
    • 共享目标文件:可以在加载或者运行时被动态地加载到存储器并链接。
  • 库分类

    • 静态库:只能在编译时被静态链接 .a;
    • 共享库:可以加载时链接或运行时链接 .so .dll 。
  • 静态库

    • 本质上是一组可重定位目标文件,在链接时,静态链接器只拷备被程序引用的目标模块:
    • 优点
      • 将一组可重定位目标文件打包至一个静态库,方便使用;
      • 在链接时,只拷备被引用模块,减小可执行文件的大小;
    • 应用举例:C语言的众多库函数有以下几种打包方式:
      • 编译器自动识别并链接:优(1 方便编程),缺(1 C库函数过多,使编译器变得复杂;2 升级时必须更新编译器版本);
      • 将所有C库函数放入一个可重定位目标模块:优(1 方便链接,2 方便升级),缺(1 链接时会拷备所有函数,引起代码量过大);
      • 将每个库函数放入多个可重定位目标模块:优(1 最终程序代码量小),缺(1 不方便链接);
      • 将所有库函数打包成一个静态库:优(1 方便升级;2 方便链接;3 最终程序代码量小),缺(1 库函数升级时,必须重新编译程序;2 不能在程序之间共享库函数)
  • 共享库

    • 两种方式
      • 加载时链接:当创建可执行文件时,静态执行一部分链接,然后在程序加载时,动态完成链接过程。
      • 运行时链接:在程序运行过程中打开共享库、定位符号地址、完成使用、关闭共享库;
        • 应用举例:软件升级(Windows的一些升级就通过更新共享库来完成);
        • Linux API:dlopen(打开并加载共享库)、dlsym(获取符号地址)、dlclose(关闭共享库)。
    • 与静态库区别
      • 在加载时/运行时链接,而不是编译时链接;
      • 升级可以通过直接替换共享库文件,而不需要重新编译;
      • 运行时链接可以实现在程序之间共享库函数。
你可能感兴趣的文章
jquery根据name属性的高级选择
查看>>
02 Django环境搭建
查看>>
nginx 中 root和alias
查看>>
cat命令
查看>>
chgrp命令
查看>>
python3+selenium框架设计09-生成测试报告
查看>>
Microsoft Azure部署MYSQL-MMM(1)安装MYSQL
查看>>
vc升级失败恢复快照后数据不一致问题
查看>>
庖丁解牛获取连接状态数的awk数组命令
查看>>
从浏览器打开网址到请求到网页内容超细原理过程详解(免费)
查看>>
《反精益创业》第二章
查看>>
Exchange Server 2013 RTM发布
查看>>
一个IT经理眼中的RTX、Simba2013与Lync
查看>>
我眼中的“君子”与“小人”
查看>>
《跟菜鸟学Cisco UC部署实战》-第 0 章 宣传-课件(一共12章,免费)
查看>>
Linux磁盘管理之LVM2 逻辑卷管理工具
查看>>
6425C-Lab3 管理用户与服务帐户(2)
查看>>
component SMS_WSUS_SYNC_MANAGER on computer NLACC00W3SD001 reported: SMS WSUS
查看>>
SHELL脚本自动备份Linux系统
查看>>
Android开发实践:多级列表的封装与应用
查看>>