主要观点:LLD 是成熟快速的链接器,支持多种二进制格式,但代码依赖全局状态,不利于库集成,存在致命错误和全局变量冲突等问题。虽有将其作为库调用的需求,但建议仍以单独进程调用。同时 LLD 一直在减少对全局变量的依赖,将全局变量迁移到Ctx类中,添加Ctx &ctx参数等,以提升可集成性和代码维护性,且已在lld/ELF部分取得进展,lld/Common部分仍需大量工作,LLD 还利用了 LLVM 的全局状态等。
关键信息:
- LLD 支持多种二进制格式,代码依赖全局状态,存在致命错误和全局变量冲突。
- 为减少全局变量依赖,进行了一系列迁移和修改,如将全局变量迁移到
Ctx类、添加Ctx &ctx参数等。 - 已在
lld/ELF部分取得进展,lld/Common部分仍需工作。 - LLD 利用 LLVM 的全局状态,如
cl::opt和ManagedStatic,且某些操作仍需注意。 - 可多次调用
lld::lldMain,但在某些情况下需注意安全性。
重要细节:
- 2020 年解决了大部分致命错误场景,利用
llvm::sys::Process::Exit等。 - 全局变量在
lld/ELF中的具体分布情况。 - 2020 年起 LLD 不断进行改造以减少全局变量依赖,如在不同年份对
lld/Common等部分的修改。 - 引入
Ctx类并进行相关修改,如在Config.h和Driver.cpp中的改动。 - 2024 年继续推进相关工作,如将更多变量移入
Ctx等。 - 在
lld/Common中用上下文感知的 API 替代全局状态相关的函数。 - LTO 链接作业利用 LLVM 全局状态,某些操作需注意。
- 可多次运行
lld-link,但仅最后一次输出诊断信息等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。