写点什么

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

  • 2017-02-23
  • 本文字数:984 字

    阅读完需:约 3 分钟

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 )关注我们。

2017-02-23 18:002796

评论

发布
暂无评论
发现更多内容

低代码:Microsoft Power Platform

lidaobing

低代码 28天写作 Power Platform

HTTPS实现原理

架构精进之路

https 七日更 28天写作

微服务转型系列1:农商行数字化转型的烦恼

BoCloud博云

微服务 银行数字化转型 API 服务治理

创业失败启示录|老老王上的人生第一课

阿萌

28天写作 创业失败启示录 青城

凝聚人心并不难,小诀窍让团队跟你一条心

一笑

管理 激励 28天写作

如何查看github评价

Albert

GitHub

创始人去世,股权怎么办?|视频号28天(21)

赵新龙

28天写作

LeetCode题解:200. 岛屿数量,DFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

批判性思维自修课(三)

石君

28天写作 批判性思维

折腾CUDA环境,搭建TF2开发环境

IT蜗壳-Tango

七日更

网站自动化任务脚本

Kylin

七日更

我的算法学习之路

熊斌

学习方法 算法 28天写作

扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说

华为云开发者联盟

容器 Volcano cncf kubeedge 代码开发

冲突域和广播域区别,集线器、交换机和路由器对比

碎碎念之「程序员的时间都花在了哪?」

Justin

设计原则 代码规范 28天写作 技术债

LiteOS调测利器:backtrace函数原理知多少

华为云开发者联盟

架构 内存 函数 LiteOS backtrace

大数据丨ClickHouse在京东能源管理平台的实践

京东科技开发者

数据库 大数据

阿里巴巴管理三板斧

Ian哥

28天写作

大数据知识专栏 - MapReduce 的自定义分组求TopN

小马哥

大数据 hadoop mapreduce 七日更

机器学习·笔记之:Cost Function - Intuition II

Nydia

西少爷肉夹馍的股权纠纷 | 视频号28天(22)

赵新龙

28天写作

【JS】预编译

德育处主任

JavaScript 大前端 js 28天写作

企业级低代码平台的选型和建设思考

李小腾

Java 创建线程有哪些方式

武哥聊编程

Java 多线程 28天写作

云算力挖矿系统开发app,矿机租赁交易平台搭建

v16629866266

Serverless Kubernetes:理想,现实与未来

阿里巴巴云原生

Serverless 容器 运维 云原生 k8s

“大禹针”在北江大堤上线,浪潮助力广东水利新基建落地

新基建

谁能拯救终将凋落的头发「幻想短篇 21/28」

道伟

28天写作

对机器视觉领域的几点看法

JiangX

机器视觉 28天写作

个人隐私后续

张老蔫

28天写作

28天瞎写的第二百三十一天:一次被骗的故事

树上

28天写作

LLVM 4中将加入新的LLVM链接器LLD_开源_Sergio De Simone_InfoQ精选文章