2017-04-12 53 views
2

我在Windows 10下爲我的開發工具使用MinGW。我有一個包含~100個源文件的C項目。我創建了一個makefile來構建項目,並且每次都運行良好。MinGW並行make:CreateProcess錯誤

但後來我試圖通過傳遞-j4mingw32-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,...) 
+0

M $提供了一個[應用程序驗證器](https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=20028),它似乎吸引了不當行爲的應用程序,特別是對CreateProcess的調用參數不清。也許你可以試試看。 – Vroomfondel

+0

可能的重複http://stackoverflow.com/questions/29450556/mingw-make-throwing-the-system-cannot-find-the-path-specified-error。當有獎金時,不能將其標記爲這樣。 –

回答

0

我想我知道問題是什麼:BullGuard。這個反病毒程序是我遇到的最嚴肅的程序,對於一個嚴肅的開發人員來說,這是完全不切實際的。它不止一次拒絕運行我自己編寫的程序。最後一根稻草是當它打斷我的QtCreator開發環境時,因爲它正在執行某些「可疑」操作(我不知道 - 產生子進程或其他東西),並且我丟失了四個源文件!幸運的是我有一個同一天的備份,所以它只花費我幾個小時的工作。

所以我卸載了BullGuard。

現在我的並行make就像夢一樣運行!

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的外部。