- 博客(2)
- 收藏
- 关注
原创 链接器是如何链接的??
这个过程它会保留有用的符号和地址,如果地址找不到会报错,例如add.c生成的符号是 Add并且有一个有效地址0x1234(假设),test2.c里声明了函数Add,这里的Add也会生成符号Add但是它的地址是无效的,在链接的过程,相同的符号中会保留一个拥有有效地址的符号,并且和其它的符号main、printf等合并成新的符号表然后跟链接库链接在一起,这样就可以通过符号表把所有目标文件链接在一块了。2.目标文件其实个elf格式的文件,每个elf文件都有自己的段位,链接的时候会把相同段合并。
2024-07-18 16:04:51
403
原创 如何从代码到可执行程序?中间经历了什么?
通过符号表的合并和重定位(每一个.o文件其实就是一个符号表),把所有符号表合并和重定位,把有用的符号留下,把重复多余的符号去掉,然后通过合并后的符号表就可以跨文件把所有.o文件链接在一起。其实是一个符号表,我们在第三步编译的时候做的四件事里,最后一个是符号汇总就是把所有符号汇总起来到这里用上场了,生成符号表。我们看到又是一大堆看不懂的符号,其实这些全部是二进制指令,它现在是以文本的形式显示出来所以是看不懂的符号,我们用 od命令 查看。然后我们查看一下test2.i里面预编译后究竟产生了什么内容。
2024-07-17 16:16:03
401
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人