




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
链接、装载与库在Linux下,当我们使用gcc来编译HelloWord程序时,只需要$gcchello.c$./a.outHelloworld其中实际包括4步骤:预处理(Prepressinng),编译(Compliation),汇编(Assembly),链接(Linking)1•预编译$gcc-Ehello.c-ohello.i或$cpphelloc>hello.i预编译主要处理源代码文件中一“#开始的预编译指令。(删除#define,处理预编译指令,删除〃/**/,添加文件行号和文件名标示,保留所有编译器指令#progam)。经过预编译的.i文件不包含任何宏定义,(所有宏定义已经展开)。2•编译编译就是把预编译完的文件进行一系列词法分析,语法分析,语义分析以及优化后生成相应汇编代码文件。$gcc-shello.c-ohello.s词法分析--识别单词,确认词类;比如inti;知道int是一个类型,i是一个关键字以及判断i的名字是否合法语法分析--识别短语和句型的语法属性;语义分析--确认单词、短语和句型的语义特征;代码优化--修辞、文本编辑;代码生成--生成译文。内联函数的替换就发生在这一阶段3•汇编汇编过程就是根据汇编指令和机器指令对照表进行翻译,生成目标机器指令。在最终的目标文件中除了拥有自己的数据和二进制代码之外,还要至少提供2个表:未解决符号表和导出符号表,分别告诉链接器自己需要什么和能够提供什么。编译器把一个cpp编译为目标文件的时候,除了要在目标文件里写入cpp里包含的数据和代码,还要至少提供3个表:未解决符号表,导出符号表和地址重定向表。未解决符号表提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其出现的地址。导出符号表提供了本编译单元具有定义,并且愿意提供给其他编译单元使用的符号及其地址。地址重定向表提供了本编译单元所有对自身地址的引用的记录。$g++-cmain.s-omain.o4•链接将生成的目标文件和系统库文件进行链接最终生成了可以在特定平台运行的可执行文件。1•地址和空间分配从输入目标文件获取各段长度,属性以及位置,并将输入目标文件中符号表所有符号定义和符号引用收集同意放到全局符号表。2•符号解析与重定位符号解析。将每个符号引用刚好和一个符号定义联系起来。使用的表:符号表重定位。链接器把每个符号定义与一个虚拟地址联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储位置,从而重定位这些节。使用的表:重定位表,符号表链接器的工作顺序:当链接器进行链接的时候,首先决定各个目标文件在最终可执行文件里的位置。然后访问所有目标文件的地址重定义表,对其中记录的地址进行重定向(加上一个偏移量,即该编译单元在可执行文件上的起始地址)。然后遍历所有目标文件的未解决符号表,并且在所有的导出符号表里查找匹配的符号,并在未解决符号表中所记录的位置上填写实现地址。最后把所有的目标文件的内容写在各自的位置上,就生成一个可执行文件。静态库链接在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。动态库链接在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。全局符号(强/弱)编译器编译源文件时会把源文件的全局符号(globalsymbol)分成强(strong)和弱(weak)两类传给汇编器,而随后汇编器则将强弱信息编码并保存在目标文件的符号表中。那么何谓强弱呢?编译器认为函数与初始化了的全局变量都是强符号,而未初始化的全局变量则成了弱符号。规则1:不允许强符号被多次定义(即不同的目标文件中不能有同名的强符号);规则2:如果一个符号在某个目标文件中是强符号,在其它文件中都是弱符号,那么选择强符号;规则3:如果一个符号在所有目标文件中都是弱符号,那么选择其中任意一个;全局构造与析构—般C/C++程序从main()函数开始,随着main()结束而结束。其实在main()函数被调用前,为了程序顺利执行,要初始化进程执行环境。队分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030国内时尚期刊行业市场发展分析及发展前景与投资机会研究报告
- 2025年帆船教练职业能力考核试卷(帆船教练实习报告撰写)
- 2025-2030医用自动配药柜行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2025-2030农贸电商平台产业市场深度调研及发展趋势与投资战略研究报告
- 2025-2030内存条行业市场发展分析及发展趋势前景预测报告
- 2025-2030全球及中国联网汽车服务行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 2025-2030中国UBI车险行业市场深度调研及前景趋势与投资研究报告
- 艺术品交易网络平台开发协议
- 网络平台技术服务外包合同
- 2025年8月镇文化活动总结报告范文
- 合同管理知识培训课件
- 2025年-浙江建筑安全员A证考试题库附答案
- 2025届山西省高三一模地理试题(原卷版+解析版)
- 2024年电信销售员工年终总结
- 2025年度执业药师职务聘用协议模板
- Unit3 Weather Part A(说课稿)-2023-2024学年人教PEP版英语四年级下册
- 《明清家居家具设计》课件
- 2-山东工业技师学院申报国家级高技能人才培训基地项目申报书
- 常用消毒剂的分类、配制及使用课件演示幻灯片
- GB 45069-2024悬崖秋千安全技术要求
- 员工反恐怖协议
评论
0/150
提交评论