0

我正在将一个巨大的 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不会删除无效的输出文件对于构建工具来说有点不常见,不是吗?

4

0 回答 0