微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bazel/sandboxfs/ld.gold:中断链接步骤时损坏的二进制文件

如何解决Bazel/sandboxfs/ld.gold:中断链接步骤时损坏的二进制文件

我正在将庞大的 C++ 代码库迁移到 Bazel。

由于我们不能一次做所有事情,因此每次编译都依赖于超过 30k 个头文件。 因此,无论我们使用 processwrapper 还是 linux-sandBox,沙箱创建都需要很长时间。 (也许这与我们必须使用的旧 Linux 3.10 内核有关?)SandBoxfs 已被证明是一个好处。使用它减少了大约 30% 的构建时间。这就是我们想要继续使用它的原因。

但是,有时我使用 Ctrl-C 中止构建,有时 Bazel 在遇到错误时中止构建。似乎每当 cc_binary 构建步骤中止时,我都会得到一个大小合适的二进制文件(就像我没有中止构建一样)但只包含 nul 字节。

只有在我使用 ld.gold(认值)时才会发生这种情况。已针对 2.35 版和 HEAD 进行测试。

总结:

  • 只有在使用 sandBoxfs 时才会发生这种情况。
  • 只有在使用(和打断)金币时才会发生这种情况。

您对如何研究这个问题有什么想法吗?甚至:如何解决

更新

gold 打开输出文件,然后它fallocate输出文件的最终大小(不使用临时文件)。然后写入数据。

如果打开文件后出现错误gold不会删除无效的输出文件。对于构建工具来说有点不常见,不是吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。