我写了一条规则来运行一些编译器(Synopsys VCS MX)。运行单个目标时,一切正常。同时运行多个目标时,编译器会遇到分段错误。运行 Bazel 时不会发生这种情况--spawn_strategy=local
。也设置--jobs 1
工作。
我能想到的唯一原因是编译器尝试使用绝对路径写入文件,与自身的其他实例发生冲突。
我的问题如下:
- 如果我的理论是正确的,那么无论我是否在沙盒中,问题都不会发生吗?
- 如果我错了,如果不是因为某些共享文件,编译器怎么会发生冲突?
- 假设对于每个沙箱,我想挂载一个
/tmp
指向不同目录的,这可能吗?
更新:根据我在 中看到的strace
,编译器的两个实例都打开一个文件/tmp/vcs_20200428163636_3/v710_tok
进行读写,并且在某些时候一个实例调用pread64()
会导致段错误。注意文件名,它看起来很可疑,就像暗示试图获取唯一文件名的日期一样,但两个实例的执行距离不够远。
问题 1 和 3 仍然有效。