
https://gitee.com/openeuler/TC/blob/master/oEEP/oEEP-0018%20openEuler%E5%85%... 建议修改 oEEP 在 2025-02-27 09:36:33,"yinchuang" <yinchuang@huawei.com> 写道: 各位伙伴好: 背景: 为了提升openEuler软件包的编译效率,从而进一步提升门禁和开发者本地开发效率,我们在2503版本使用mold链接器来缩短C/C++库的链接时间。 Mold(A Modern Linker)是一种对比其他链接器(GNU ld、GNU gold、LLVM lld)链接效率更高的开源链接器, 其通过更高效的Identical Comdat Folding (ICF)算法、更好的并行编程,更高效的多线程库等技术来提升链接的效率,具体可参考:https://github.com/rui314/mold/blob/main/docs/design.md 具体方案: 由于mold链接器本身存在一定的功能欠缺(对kernel的不支持,对linker script支持不完善)我们决定对一些编译时间较长且不受mold影响的包打开mold 链接: 1. 在2503版本上白名单内的软件包默认配置使用mold进行链接,白名单可参见:https://gitee.com/src-openeuler/openEuler-rpm-config/blob/openEuler-25.03/00... 2. 为了提供更加灵活的链接器配置方式,各软件包可在spec文件中覆写_ld_use变量来切换链接器,如: 1) %define _ld_use %{nil} 取消因为软件包在白名单中所添加的mold选项 2) %define _ld_use -fuse-ld=xxx 切换到不同的链接器,注意当定义多个-fuse-ld 选项时编译器会取最后一个配置项 3. 版本上会预装mold链接器来提供各软件包对mold的调用 收益:经统计通过使能mold的软件包编译效率总体可提升5+% 我们会持续在社区讨论mold使能可行性与风险,感谢大家。 openEuler Compiler SIG 印闯