如何使用带有 bazel 和 gcc10 的模具链接器?

分享于2022年09月08日 bazel c++ gcc linker mold 问答
【问题标题】:how to use mold linker with bazel and gcc10?如何使用带有 bazel 和 gcc10 的模具链接器?
【发布时间】:2022-08-01 23:51:28
【问题描述】:

mold 是最新的现代高速链接器,我想在编译我们繁重的 c++ 存储库时用它来替换默认的 ld 链接器。

我使用 Bazel + GCC 10.2 进行编译,模具文档提供了 gcc -B/mold/path 解决方案。但是我找不到将这个 CLI 选项传递给 bazel 的方法。

我试过 bazel build --linkopt=-B/usr/local/libexec/mold //src:XXX --copt=-B/usr/local/libexec/mold ,但都不起作用,bazel 仍然使用旧的链接器。

我可以确保我的系统上已经安装了模具,因为我可以通过模具直接运行 g++ -B/usr/local/libexec/mold 来编译c++ helloworld程序链接。


【解决方案1】:

试试 --linkopt=-fuse-ld=bfd --linkopt=-B/usr/local/libexec/mold --sandbox_block_path=/usr/bin/ld.bfd

(Bazel 知道一些链接器,例如 GNU gold 和 lld。如果检测到它们,它将明确告诉编译驱动程序使用它们,从而绕过 ld 中的模具 /usr/local/libexec/mold 。)

【讨论】:

  • 谢谢,但是你如何验证可执行二进制文件是由模具链接的?我在您的回答中尝试了 args,但二进制 .comment 部分没有霉菌。我按照模具文档提到的运行 readelf -p .comment <executable-file> 。即使我创建了 /use/bin/ld 到模具的软链接,它仍然不起作用。我的 bazel 版本是 0.23
  • 我建议使用现代 Bazel。该版本已有多年历史。