【问题标题】:MSB6006 error "CL.exe exited with code -1073741819" caused by errors in codeMSB6006 错误“CL.exe exited with code -1073741819”由代码错误引起
【发布时间】:2021-05-17 04:56:04
【问题描述】:

TLDR:IDE 和编译器都错过了代码中的一个错误,它只是由这个退出代码报告的。

在对有关虚拟方法的代码进行了小幅编辑后,我发现上面的错误似乎无处不在。将退出代码转换为十六进制会得到 0xc0000005,即访问冲突。同样的问题正在解决herehere。根据这些讨论,这可能是由于 cl.exe 由于某种原因无法访问造成的,但这些原因不适用于我的情况(我检查过)。

在某处提到的另一个原因(我丢失了链接)是项目特定设置中的错误。我的其他项目编译没有问题,所以我试图解决这个问题。即使我创建了一个新的(这个副本)项目,它也可以工作。但是,当我将所有标头和源代码移到这个新项目时,它又开始做这件事了。

【问题讨论】:

    标签: c++ visual-studio compiler-errors cl


    【解决方案1】:

    我试图回到错误突然开始出现的地方,然后我找到了。我不知道是怎么回事,但这个错误是由我编写的代码不正确引起的。

    我的一个头文件包含两个类,其中一个(基础)是独立的,但另一个(派生的)也为它提供了一个特定的包装器。两者都有一个相同的方法(相同的名称和参数列表),这可能不是最好的方法,但它似乎编译没有问题。

    class Base {
        void DoStuff(void*);
        void SetValue(bool);
    }
    
    class Derived : private Base {
        void* m_ptr;
        void DoStuff() { Base::DoStuff(m_ptr); }
        void SetValue(bool b) { Base::SetValue(b); }
    }
    

    注意,我这样做是因为DoStuff的参数不同,否则我只会公开继承。

    然后为了方便我决定添加一个类似接口的(抽象)类,错误开始出现。

    struct Iface {
        virtual void SetValue(bool) = 0;
    }
    
    class Base : public Iface {
        void DoStuff(void*);
        void SetValue(bool) final;
    }
    
    class Derived : private Base {
        void* m_ptr;
        void DoStuff() { Base::DoStuff(m_ptr); }
        void SetValue(bool b) { Base::SetValue(b); }
    }
    

    你看到我在这里犯的明显错误了吗?

    删除final后,代码再次编译。 IDE 没有发现我的错误,可能是因为 BaseDerived 实际上都是模板,编译器也不是,首先要抱怨的是 CL,它给出了这个不完全清楚的退出代码。

    【讨论】:

    • 你似乎区分了编译器和CL.exe。但CL.exe 实际上是 Compiler 和 Linker。因此,在这种情况下,编译器似乎已经崩溃(由于编译器内部的访问冲突),正如来自 MSBuild(构建工具)的错误消息中所报告的那样。编译器崩溃意味着编译器中可能存在错误。您应该将此情况报告给 Microsoft(并向他们提供可重现的示例),以便他们修复编译器。
    • @heapunderrun 我认为CL.exe只是一个编译器,MSVC链接器是link.exe,在同一个文件夹中找到。
    • @M.A CL.exe 的文件名可能来自单词 compilelink 的第一个字母。 CL.exe 自动调用link.exe。有一个选项 /c 可以防止CL.exe 调用链接器(在这种情况下,CL.exe 只会将源代码编译成.obj 文件,您可以稍后手动执行@ 987654338@)。实际上,MSVC 编译器是跨多个 DLL 实现的(c1xx.dll 是 C++ 前端,c2.dll 是后端;还有 c1.dll 用于 C 前端),但 CL.exe 正在加载这些 DLL 并驱动编译+ 链接。
    • @heap 有意思,我不知道 CL.exe 的结构。
    • 很高兴您得到了解决方案,感谢您的分享,如果您将它们标记为答案,我将不胜感激,这将对其他社区有益。
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2015-10-03
    • 2022-08-18
    • 1970-01-01
    • 2018-03-26
    • 2012-09-28
    • 1970-01-01
    相关资源
    最近更新 更多