《01-Linker_loader》.pdf

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
链接器、加载器 Linker and Loader 董渊 2006 dongyuan @tsinghua.edu.cn 清华大学 计算机科学与技术系 软件研究所 Sep. 25, 2006 Copyright @ Tsinghua University Page 1 提纲 – 链接和加载的作用 – 静态链接 目标文件 ( 处理对象 ) 可重定位 目标文件 (输入) 符号表和符号解析 重定位 可执行 目标文件 (输出) – 加载可执行目标文件 – 共享库的加载和动态链接 – 处理目标文件的常用工具 Sep. 25, 2006 Copyright @ Tsinghua University Page 2 链接和加载的作用 链接器 (Linker )是把不同 部分的代码和数据,收集 组合成为一个可加载 可执 行的文件。 加载器 (Loader )把可执行 文件从外存装入内存并进行 执行 Sep. 25, 2006 Copyright @ Tsinghua University Page 3 链接和加载的作用 链接的时机: – 编译时,就是源代码被编译成机器代码时; – 加载时,也就是程序被加载到内存时; – 运行时,由应用程序来执行。 链接在现代软件开发中占有极为重要的地位: 为 “复用”提供技术支持: – 它使得分离编译成为可能。我们可以把大型的应用程序分解为多个 较小的 便于管理的模块,独立的修改和编译这些模块,这样当我 们修改这些模块中的一个时,只需要重新编译链接它,而不必重新 编译整个应用程序所有模块。 – 动态绑定 (Binding ):接 口,实现定义和使用的分离 学习链接知识的意义: – 帮助我们构造大型程序; – 帮助我们避免一些危险的编程错误; – 帮助我们开发共享库 (构件库); Sep. 25, 2006 Copyright @ Tsinghua University Page 4 编译器驱动程序 • 编译器驱动程序为用户根据需求调用预处理器 汇 编器和链接器。 • 以GCC 为例,我们要用用 GCC 编译系统编译如下 程序: /* swap.c */ /* main.c */ extern int buf[]; void swap(); int *bufp = buf[ ]; int *bufp1; int buf[2] = {1.2}; void swap() { int main() int temp; { bufp1 = buf[1]; swap(); temp = *bufp ; return ; *bufp = *bufp1; } *bufp1 = temp; } Sep. 25, 2006 Copyright @ Tsinghua University Page 5

文档评论(0)

ghfa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档