![](/img/trans.png)
[英]MSB6006 error “CL.exe exited with code -1073741819” caused by errors in code
[英]error MSB6006: “CL.exe” exited with code 2
我正在用Visual C ++編寫,並且在編譯時會出現此錯誤:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB6006: "CL.exe" terminato con il codice 2.
有人知道為什么嗎?
提前致謝!
當我通過以下方法忘記return語句時,遇到了相同的錯誤:
char SpiRAM::write_byte(int address, char data_byte)
{
assert(address >= 0);
assert(address < SRAM_SIZE);
_sram[address] = data_byte;
return data_byte;
}
實際上,您可以看到正確的錯誤消息,而不是Microsoft的任意錯誤代碼。 但是由於錯誤列表總是在出現錯誤時被強制顯示,因此並不是很明顯。 選項卡“ Error List
旁邊是另一個選項卡Output
,它顯示原始錯誤輸出。 自從我使用2019年以來,我不確定該選項卡是否在所有版本中都存在,但是在較舊的版本中可能總有類似的東西。 可能使用了不同的名稱,或者是一個完全獨立的窗口,而不是與Error List
分組在一起。
對於另一個回答者,此處將顯示確切的選項卡: error C4700: uninitialized local variable 'm' used
這將使他免於挖掘所有代碼的麻煩。 =]
而且,如果您忘記了需要返回值的函數的返回值,則會看到: error C4716: 'foo': must return a value
發生這種情況的原因多種多樣:
1)我忘記在非空函數中添加return語句。
2)我試圖使用未初始化的指針。
3)我寫了像for(int i = i; ...)的循環,而不是for(int i = 0; ...)
您可以檢查這些代碼,這可能會有所幫助。
我在v110(Visual Studio 2012)-Compiler中使用以下代碼收到此錯誤,其中包含錯誤的基於for的循環。
class A
{
int b;
};
int main(int argc, char* argv[])
{
A inst;
for (auto &i : inst)
{
}
return 0;
}
PS:v140(Visual Studio 2015)顯示正確的錯誤:
error C3312: no callable 'begin' function found for type 'A'
error C3312: no callable 'end' function found for type 'A'
我在Visual Studio 2019中使用C ++代碼對我發生了此錯誤,因為我沒有正確初始化我的for-loop
。
我做了:
for (int m; m < bytewidths + 1; m++) {}
而不是
for (int m=0; m < bytewidths + 1; m++) {}
我認為解決此問題的方法是手動解決您最近的代碼
我收到此錯誤是因為我在保存文件名時拼寫錯誤。*順便說一句,此保存是在插入一些for循環之后進行的,這使我陷入了瘋狂,因為它們也可能是導致此錯誤的原因。
薩比(Sahbi)的技巧是查看“輸出”選項卡,而不僅僅是常規的“錯誤代碼”選項卡,對我來說非常有用! 我使用“查看”菜單查找並顯示“輸出”選項卡 。 它讀取以下內容:
1> ------構建開始:項目:C867性能評估,配置:調試x64 ------ 1> Security_Student.cpp 1> c1xx: 致命錯誤C1083:無法打開源文件:'Security_Student.cpp' :沒有這樣的文件或目錄 1> C:\\ Program Files(x86)\\ Microsoft Visual Studio \\ 2019 \\ Community \\ MSBuild \\ Microsoft \\ VC \\ v160 \\ Microsoft.CppCommon.targets(429,5):錯誤MSB6006:“ CL。 exe”,代碼2退出。1>完成的建築項目“ C867 Performative Assessment.vcxproj”-失敗。 ==========構建:0成功,1失敗,0最新,跳過0 ==========
我已將文件另存為“ Securtiy_Student.cpp”。*
我會發表評論並贊成,但我還沒有代表。
*如果拼寫正確的文件也沒有被刪除,這將不是問題,因為編譯器會忽略拼寫錯誤的文件,並使用拼寫正確的先前版本。 但是,我在Visual Studio中也遇到了一個奇怪的錯誤,在嘗試保存文件時,它偶爾會確定我的文件之一是新文件,並且必須“另存為...”。但是,當我接受該操作時,它就會說該文件已經存在,但是如果我嘗試用保存替換它,它說你不能替換它,因為它正在被使用。 因此,解決方案是將文件粘貼到文本文件中,拒絕將文件保存在Visual Studio解決方案中,刪除解決方案文件,創建一個新文件,將文本粘貼到其中,然后再次保存到解決方案中。 無論如何,我將在其他地方發布此問題,但我想提供一種偷偷摸摸的方式來獲取錯誤的文件名中該線程中的錯誤的上下文。
也可能是實際刪除的標頭或源文件 ,仍在項目中列出。 只需檢查這些文件。
我使用系統資源管理器刪除了Header和Source文件。 VS顯然無法識別缺失的文件,並嘗試對其進行編譯,直到重新加載項目為止。
重新加載項目為我工作。
只是想添加在Visual C ++ 2019(16.1.4)中發生這種情況的另一種情況:
...
char *s;
for(int i = 0; i < n; ++i)
{
if(i == 4) // we know n is going to be >= 4 but Visual C++ doesn't
s = getStringPointerFromSomewhere();
}
puts(s);
Visual C ++將在輸出中輸出一條消息:使用了potentially uninitialized local pointer variable 's' used
,但崩潰了,而不是將其報告為正常的錯誤或警告(可以說這是一個警告,因為它是完全合法的C代碼)。
解決這一問題的方法是在聲明后將s賦給NULL:
char *s = NULL;
(所以...我猜是在聲明時使用初始化指針和其他變量的大概好習慣。)
您應該檢查您的源文件。 編譯器可能找不到源文件,可能是您鍵入了錯誤的名稱。 例如,編寫#include <isotream>
而不是#include <iostream>
會導致此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.