【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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:002645

评论

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

发布一个免费的 Elasticsearch 多集群监控和管理平台 - 极限数据平台

极限实验室

elasticsearch infini 极限实验室 极限数据平台 ES多集群管理

如何设计一款跨平台低延迟的RTMP|RTSP直播播放器

音视频牛哥

WebRTC HLS RTMP RTSP

贪心:柠檬水找零、跳跃游戏🍋

空城机

JavaScript 贪心算法 11月日更

GitHub霸榜月余的24万字Java面试手册,竟是阿里机密

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

拒绝卡顿,揭秘盒马鲜生 APP Android 短视频秒播优化方案

阿里巴巴终端技术

android App 短视频 移动开发 体验优化

线程如何实现保持同步

编程江湖

Java 多线程

远程工作的这几年

程序员铮铮

程序员 代码人生 远程工作

Spring Bean生命周期你除了会背八股文面试,真的会用了吗?

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

如何成为web安全工程师?

喀拉峻

网络安全 安全 信息安全

如何判断一个需求是真的用户需求,还是伪需求呢?

石云升

产品思维 需求分析 11月日更

如何运用Camtasia中的交互性?

淋雨

Camtasia

Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)

不脱发的程序猿

Python qt PyQt GUI设计 QComboBox下拉列表框类

【AI最前线】精准优质-资讯|分享|热议第41期

百度大脑

人工智能

提升研发效能的低代码思路

赫杰辉

研发效能 低代码平台 x-series

终于把性能测试这事儿讲清楚了

博睿数据

通过 for 循环,比较 Python 与 Ruby 编程思想的差别

Python猫

Python

YU12 YV12 NV12 NV21区别

音视频牛哥

WebRTC RTMP RTSP yuv

海康摄像机RTSP地址格式(官方最新版)

音视频牛哥

WebRTC RTMP RTSP 播放器

EMQ 出席 2021 ArchSummit,打造全连接时代的数据基础设施

EMQ映云科技

大数据 物联网 IoT 智能

快上车丨直播课“Hello ArkansasUI:初识Slider组件(eTS)”来啦

HarmonyOS开发者

HarmonyOS

Spring中的Controller和Service是线程安全的吗?我有点懵

热爱java的分享家

Java spring 程序人生 编程语言 经验分享

一次搞懂SpringBoot核心原理:自动配置、事件驱动、Condition

热爱java的分享家

Java 程序人生 Spring Boot 编程语言 经验分享

Python代码阅读(第61篇):延迟调用函数

Felix

Python 编程 Code 阅读代码 Python初学者

在 JavaScript 中如何检查对象为空

编程江湖

JavaScript 大前端

构建多云战略的注意事项

浪潮云

云计算

看完源码记不住?掌握这套方法,Alibaba不会少你一个工位

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

如何实现在线播放mpeg-ts文件?

Changing Lin

11月日更

白话 Linux 容器资源的隔离限制原理

恒生LIGHT云社区

Linux 运维

钉钉小程序快照技术初窥

阿里巴巴终端技术

小程序 ios android 快照 体验优化

Spark面试题大全

编程江湖

大数据 Spark面试题

Go WebSocket开发与测试实践【gorilla/websocket】

FunTester

Java websocket 接口测试 Go 语言 FunTester

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