MinGW parallel make:CreateProcess错误

时间:2017-04-12 19:34:42

标签: mingw gnu-make

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

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

  

gcc.exe:错误:CreateProcess:没有这样的文件或目录

我也使用-j2收到此错误,但似乎不太常见。

mingw32-make --version报告

  

GNU Make 4.1
  专为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,...)

2 个答案:

答案 0 :(得分:0)

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

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

其他可能的原因:

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

另一个可能的原因是registry settings related to cmd.exe or .bat extension broken by malware。如果是这种情况,则在执行CreateProcess时会发生错误,并且该错误位于mingw32-make的外部。

答案 1 :(得分:0)

我想我知道问题是什么:BullGuard。这个反病毒程序是我遇到的最苛刻的程序,对于一个认真的开发人员来说是完全不切实际的。它不止一次拒绝运行我自己编译的程序。最后一根稻草是它打断了我的QtCreator开发环境,因为它正在执行一些“可疑的”操作(我不知道 - 产生一个子流程或其他东西),我丢失了四个源文件!幸运的是,我有一个当天的备份,所以它只花了我几个小时的工作。

所以我卸载了BullGuard。

现在,我的并行制作就像梦一样!