如何解决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 举报,一经查实,本站将立刻删除。