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

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n
\u0026#xD;\n

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

\u0026#xD;\n
\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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格式去对不同的二进制文件格式做抽象。

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

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

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

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

\u0026#xD;\n\u0026#xD;\n

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

\u0026#xD;\n\u0026#xD;\n

感谢冬雨对本文的审校。

\u0026#xD;\n

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值