错误 MSB6006:“CL.exe”以代码 2 退出

Posted

技术标签:

【中文标题】错误 MSB6006:“CL.exe”以代码 2 退出【英文标题】:error MSB6006: "CL.exe" exited with code 2 【发布时间】:2012-12-19 09:17:29 【问题描述】:

我正在使用 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.

有人知道为什么吗?

提前致谢!

【问题讨论】:

this 有帮助吗? 在哪里可以找到路径环境变量? 【参考方案1】:

您实际上可以看到正确的错误消息,而不是 Microsoft 的任意错误代码。但是由于错误列表总是在有错误时强制可见,所以不是很明显。在标签Error List 旁边是另一个标签Output,它显示了原始错误输出。自从我使用 2019 以来,我不确定该选项卡是否存在于所有版本中,但无论如何,旧版本中可能存在非常相似的内容。可能名称不同,或者是一个完全独立的窗口,而不是与 Error List 分组。

在another answerer here 的情况下,将显示确切的标签:error C4700: uninitialized local variable 'm' used

这将使他不必深入研究他的所有代码。 =]

如果您忘记了需要它的函数的返回值,您会看到:error C4716: 'foo': must return a value

【讨论】:

这是解决问题的最通用方法,因为它考虑了所有可能的情况。 我的问题是我拉了一个队友的代码,他加了一个模块...npm install 解决了!【参考方案2】:

这发生在我身上有多种不同的原因:

1) 我忘记在非 void 函数中添加 return 语句。

2) 我尝试使用未初始化的指针。

3) 我写了一个类似 for(int i=i;...) 的循环,而不是 for(int i=0;...)

您可以检查这些代码,这可能会有所帮助。

【讨论】:

【参考方案3】:

当我在以下方法中忘记返回语句时,我得到了同样的错误:

char SpiRAM::write_byte(int address, char data_byte)

    assert(address >= 0);
    assert(address < SRAM_SIZE);

    _sram[address] = data_byte;

    return data_byte;

【讨论】:

直到今天我在 Visual Studio 中忘记返回语句时仍然收到此错误。【参考方案4】:

我在 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 中已经解决了。【参考方案5】:

我在使用 Visual Studio 2019 的 C++ 代码时出现此错误,因为我没有正确初始化我的 for-loop

我做到了:

for (int m; m &lt; bytewidths + 1; m++)

而不是

for (int m=0; m &lt; bytewidths + 1; m++)

我认为解决这个问题的方法是手动解决你最近的代码

【讨论】:

【参考方案6】:

也可能是实际删除的头文件或源文件,仍列在您的项目中。只需检查此类文件。

我使用系统资源管理器删除了一个头文件和源文件。 VS 显然无法识别已删除文件的缺失并尝试编译它们,直到您重新加载项目。

重新加载项目对我有用。

【讨论】:

同样的事情发生在我身上【参考方案7】:

我收到此错误是因为我在保存时拼错了文件名。* 顺便说一句,此保存是在插入了几个 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): error MSB6006: "CL.exe" exited with code 2 . 1>完成建设项目“C867 Performative Assessment.vcxproj”——失败。 ========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

我已将文件保存为“Securtiy_Student.cpp”。*

我会发表评论和投票,但我还没有代表。

*如果没有删除拼写正确的文件,这不会有问题,因为编译器会忽略拼写错误的文件并使用拼写正确的先前版本。但是,我也遇到了 Visual Studio 的一个奇怪错误,当我尝试保存它时它偶尔会确定我的一个文件是新的并且必须“另存为...”但是,当我接受该操作时,它说文件已经存在,但是如果我尝试用保存替换它,它说你不能替换它,因为它正在被使用。因此,解决方案是将文件粘贴到文本文件中,拒绝将文件保存在 Visual Studio 解决方案中,擦除解决方案文件,创建一个新文件,将文本粘贴到其中,然后再次保存到解决方案中。无论如何,我会在别处发布这个问题,但我想提供一种可以从拼写错误的文件名中获取此线程中的错误的偷偷摸摸的方式的上下文。

【讨论】:

我似乎在这里找到了我的次要问题的答案:***.com/questions/6514458/…我的项目文件夹只读属性设置为true。【参考方案8】:

只是想添加另一个在 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;

(所以......我猜想在声明时使用初始化指针和其他变量的可能好习惯。)

【讨论】:

【参考方案9】:

您应该检查您的源文件;编译器可能找不到源文件,也许您输入了错误的名称。例如写#include &lt;isotream&gt; 而不是#include &lt;iostream&gt; 会导致问题。

【讨论】:

以上是关于错误 MSB6006:“CL.exe”以代码 2 退出的主要内容,如果未能解决你的问题,请参考以下文章

error MSB6006: “CL.exe”已退出,代码为X —— 的解决办法

使用VS自带OpenMP时出现“错误 MSB6006 CL.exe 已退出,代码为2”

C++笔记:error MSB6006: “CL.exe”已退出,代码为 2 + VS无法启动程序,系统找不到指定的文件

使用 C/C++ 获取错误消息 MSB6006 错误代码 2

error MSB6006: “CL.exe”已退出,代码为 -1073741515 解决方案

VS2010配置目录,解决:error MSB6006: “CL.exe”已退出,代码为 5问题