LLVM 4 中将加入新的 LLVM 链接器 LLD

阅读数:1283 2017 年 2 月 23 日 18:00

LLD 将被添加到 LLVM 4 rc1 中,并默认启用。LLD 自称在性能上大大优于 GCC ld。虽然该新链接器早可用于构建在用的 FreeBSD/amd64 基系统(base system),但是这次将其添加到 LLVM 中依然是实验性的,在出现问题时会回退到 rc2。

在最新发布的 FreeBSD 项目季度状态报告中,下面一段话是对 LLD 进展情况和成熟度的最好实证:

上个季度中,LLD 开发人员做出了很大的进展。随着变更已提交到 LLD 和 FreeBSD,我们达成了一个重要的里程碑,即现在可以使用 LLD 链接整个 FreeBSD/amd64 基系统(内核与用户层)。

此外,BSD 项目贡献的一些补丁使得LLD 可以链接近95% 的BSD ports,大约是两万五千多个软件包。

LLD 工作启动于2015 年五月,目标在于重写ELF(UNIX)和COFF(Windows)系统链接器以提供更高的性能。据LLD 开发人员说,新链接器在总体上会比 GNU gold linker 快 1.2 到 2 倍,而 GNU gold linker 本身也是 Google 为改进 ld 链接性能而在内部创建的。事实上,LDD 可以比 ld 和 gold快得更多,尤其是编译大规模代码库时。另一方面,对于小型程序或者大量使用共享库的程序,LDD 的优势就并非那么明显了。和gold 一样,LLD 并不使用 BFD 格式去对不同的二进制文件格式做抽象。

尤其值得一提的是,LLD 非常之小,相比于 gold 的十六万五千行代码,用于 COFF 链接器的 LDD 只有七千行代码,而用于 ELF 链接器的是一万八千行代码。此外,它也可以嵌入到静态库等程序中,还可用于调用 lld::elf::link 入口点。

如果想在 LLVM 4 可用之前就试用 LLD,你可以通过构建源文件得到:

  $svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
  $cd llvm/tools
  $svn co http://llvm.org/svn/llvm-project/lld/trunk lld
  $cd ../../..
  $mkdir build
  $cd build
  $cmake -G “Ninja” -DCMAKE_BUILD_TYPE=”Release” -DCMAKE_INSTALL_PREFIX=”your_preferred_location” ../llvm
  $ninja lld
  $ninja install

一旦 LDD 编译完成,最安全可靠的使用方法是将 ld 逻辑链接到 ld.lld,这同样会使 LDD 与 GCC 一起工作。或者你也以使用 LLVM 的-fuse-ld=lld选项,这样就不必再做逻辑链接了。

查看英文原文: LLD, LLVM’s New Linker, Coming to LLVM 4


感谢冬雨对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

收藏

评论

微博

用户头像
发表评论

注册/登录 InfoQ 发表评论