MinGW 并行制作:CreateProcess 错误

MinGW parallel make: CreateProcess error

我在 Windows 10 下使用 MinGW 作为我的开发工具。我有一个包含约 100 个源文件的 C 项目。我创建了一个 makefile 来构建项目,每次都运行良好。

但后来我试图通过将 -j4 传递给 mingw32-make 来加快构建速度,告诉它并行使用四个处理器。这确实加快了构建速度,但只是暂时的:经过看似随机的编译次数(每次次数都在变化),我得到错误

gcc.exe: error: CreateProcess: No such file or directory

我在 -j2 中也遇到了这个错误,但它似乎不太常见。

mingw32-make --version 报道

GNU Make 4.1
Built for i686-w64-mingw32

我在 Qt Creator 下也有一个大型的 C++ 项目,它表现出完全相同的问题。

知道是什么导致了这个随机的 CreateProcess 错误吗?

这是一个失败的 CreateProcess 调用示例:

CreateProcess(C:\Users\TonyK\AppData\Local\Temp\make44344-14.bat,C:\Users\TonyK\AppData\Local\Temp\make44344-14.bat,...)

可能是竞争条件,即某些相互依赖的构建步骤之间缺乏同步。

使用 GNU make 的 --trace 参数来查看它在尝试什么,并 --output-sync 将特定配方和目标的所有输出组合在一起。目标是查看哪个命令行产生了错误以及针对哪个文件。


其他可能的原因:

@Vroomfondel 怀疑这是 mingw32-make 中的错误。这仅适用于临时 .bat 文件作为内部 mingw32-make 逻辑而不是 Makefile 逻辑的一部分创建的情况。在这里,您需要调试跟踪 CreateProcess 调用时间与相关文件的创建时间。

另一个可能的原因是 。如果是这种情况,则错误发生在执行 CreateProcess 并且在 mingw32-make.

外部

我想我知道问题出在哪里:BullGuard。这个反病毒程序是我遇到过的最管用的程序,对于认真的开发人员来说是完全不切实际的。它不止一次拒绝 运行 我自己编译的程序。最后一根稻草是因为它正在执行某些 'questionable' 操作(我不知道 -- 生成子进程或其他东西)而中断了我的 QtCreator 开发环境,我丢失了四个源文件!幸好我有当天备份,所以只花了我几个小时的工作。

所以我卸载了 BullGuard。

现在我的平行线让运行如梦如幻!