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。
现在我的平行线让运行如梦如幻!
我在 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。
现在我的平行线让运行如梦如幻!