在linux上,从c源码到可执行文件主要需要经历translator(compiler assembler)生成object file,再经由linker连接成可executable object file。!,今天来研究下linking这一步。
object file 分三种……今天只看relocatable 它在linux上的格式是ELF(..) 结构如图……分成这些section 主要是.text .data .symtab(作用。。)
linker处理对象就是relocatable,主要工作为两个:…… symbol resolution:解释symbol分三种 每个object module都有一个symbol table(即elf中.symtab),里面记载了它所定义和引用的symbol,这一步的工作就是将所有这些object module的引用和定义一一对应起来。 aside:如果出现multiply defined global symbols,优先选择function和有初始化的全局变量。 Relocation 分为两步,先合并section和symbol definitions并分配run-time address, 再更改那些symbol references的地址 随想: 信息量比较大,虽然很有趣,但脑袋也有点痛了。还是应该抓住终点,一些细节可以以后再回顾。但是经过这番努力,对计算机系统的一些比较底层的原理有了进一步了解。毕竟他是我的好朋友,总是那么兢兢业业、诚恳忠实,对这样的朋友有更深了解总是一件令人开心的事(^_^)也能促进我们今后更好的合作嘛!
原文:http://www.cnblogs.com/justforfun12/p/4993057.html