返回介绍

2. 链接

发布于 2024-10-13 10:58:55 字数 874 浏览 0 评论 0 收藏 0

汇编器产生的目标代码不能直接在计算机上运行,必须经过链接器(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文