文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. 链接
汇编器产生的目标代码不能直接在计算机上运行,必须经过链接器(linker)处理才能生成最终可执行代码。链接器通常用来将多个目标代码连接成一个可执行代码,这样可以先将整个程序分成几个模块来单独开发,然后才将它们组合成一个应用程序。
GNU
链接器 ld
默认使用 _start
作为执行程序的真正入口。可使用 -e <lable>
手工指定。
_start
必须是 global,使其对链接器可见。可使用readelf -s
查看符号表的 Bind 属性。
$ ld -o hello hello.o
$ readelf -h hello ELF Header: Entry point address: 0x401000
$ readelf -s hello | grep _start 7: 0000000000401000 0 NOTYPE GLOBAL DEFAULT 1 _start
如果链接器没找到
_start
,或者不是global
,那么指向一个默认地址。
ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
LLVM
按官方资料显示,编译大型程序时, ld.lld
要比 ld
速度快很多。但简单测试结果是其生成的可执行文件尺寸要大很多。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论