熟悉ar的来给讲讲吧,我有点儿不明白。
ld是o为单位的,ar是把几个o打包在一起(具体怎么回事儿我不知道,知道就不困惑了),那么静态链接的时候,ld是把一个o都复制过去啊,还是只复制一个func啊?因为binutils的核心是bfd,bfd的接口都是section的,我想是把整个o都复制过去,又不确定,还有ar的原理也不明白。
牛群啊,你出来吧,我是冯巩。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
整个O过去,那链接是快,可生成的质量太糟了。
大的没试过,曾试过一单片机的。因为单片机特讲究内存空间,试过,只链接调用的那个函数的目的码。
扯淡!ld就是以o为单位的,bfd只提供section的信息。
ar文件头索引出哪个符号在哪个.o,然后ld去copy这个o过去。
学习下
回复 1# prolj
静态链接只链接调用的函数
一个o都复制过去
ar 就是把所有的.o简单拼接在一起打包
ar文件的头部还可以创建一个索引,指出哪个符号在哪个.o文件中,这样可以加快链接速度