C++ QtCreator生成返回集合2:ld返回退出状态1

C++ QtCreator生成返回集合2:ld返回退出状态1,c++,qt-creator,ld,C++,Qt Creator,Ld,在QtCreator中构建几个不同的项目时,我遇到了以下构建错误: collect2: ld returned 1 exit status 在仅仅改变了一些事情(不应该改变构建中任何重要的东西)之后,如果它已经出现,它就会消失,如果它不在那里,它就会出现 在我当前的学校项目中,我正在尝试编译rock03.cpp。它是构建中唯一的文件,具有main()方法。我刚刚成功地运行了它,然后回去更改一些if()s的顺序,现在,我只收到两个相关的警告: overriding commands for ta

在QtCreator中构建几个不同的项目时,我遇到了以下构建错误:

collect2: ld returned 1 exit status
在仅仅改变了一些事情(不应该改变构建中任何重要的东西)之后,如果它已经出现,它就会消失,如果它不在那里,它就会出现

在我当前的学校项目中,我正在尝试编译rock03.cpp。它是构建中唯一的文件,具有main()方法。我刚刚成功地运行了它,然后回去更改一些
if()
s的顺序,现在,我只收到两个相关的警告:

overriding commands for target 'rock03.o'

以及所讨论的错误

有人知道为什么会这样吗?我似乎无法以任何合理的确定性重现错误,在我构建之前,QtCreator也没有抱怨任何事情


谢谢

如果唯一的消息错误是关于链接器的错误,原因可能是您的程序仍在运行,链接器无法访问二进制文件。确保应用程序已停止,如果仍在运行,请将其杀死。
Qtcreator从不检查上一次运行是否在编译之前停止。

检查“编译输出”窗格会发现.pro文件试图链接同一个.cpp文件两次。

如果您只是将此作为一个错误,那么编译器输出确实很有帮助,但第一个候选者可能是您仍然打开了输出程序,它不能写入文件,因为这会给你一个单独的collect2错误,像这样

这个错误也可能是因为链接问题而发生的,例如,你忘了使用“extern”指令从头文件声明一些静态变量。

可能还有更多的原因导致这个错误。但对我来说,从类中删除未使用的插槽后,问题就解决了。

如果不关闭主应用程序,则会发生这种情况(因此输出可执行文件仍在运行,但没有任何可见窗口)。例如:

int main() {
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
当您关闭主窗口时,此应用程序可以正常结束,但此代码

int main() {
    QApplication a(argc, argv);
    QDialog w;
    w.exec();
    return a.exec();
}
关闭对话框时不会关闭应用程序(至少对我而言)


一个解决方案是始终创建主窗口并确保将其关闭。

我也遇到了同样的问题。我的解决方案是-实现所有虚拟函数和所有插槽声明。

这发生在我身上,因为我在头文件中声明,然后删除cpp文件中的函数,而忘记删除头文件中的删除。例如

 //header file
class CLASS : public Q_OBJECT
{
...
protected:
void mouseMoveEvent(QMouseEvent*);
}

//source file

void CLASS::mouseMoveEvent(QMouseEvent*e)
{
...
}
    //I'll delete this, then forget to delete "void mouseMoveEvent(QMouseEvent*);" in the header file

在我的例子中,它是声明clear虚拟函数

void virtual Func(MouseEvent*); // Error.
void virtual Func(MouseEvent*) = 0; // Well!

在我的例子中,文件夹权限是问题所在检查“编译输出”窗口对于找出问题的确切原因至关重要。(QtCreator在这方面与Visual Studio相反,因此需要一些时间来适应)。我尝试正确设置权限,但之后似乎不起作用,最后我停用了shadow build,然后转到“Tools/Options/Build&Run/General/Projects Directory”并将“Directory”设置为“.”。然后它最终编译。它是Qt5.11中的kmap2qmap项目


只要我的2美分,以防任何人发现它们有用。

collect2:ld返回1退出状态
不是错误消息本身。这只是链接器失败的一个提示。您可以发布以前的错误输出行吗?没有其他错误行。这就是全部内容。如果您单击“编译输出”“按钮您应该获得链接器输出,它不会显示在qt creator的正常生成错误输出中。“编译输出”按钮位于qt creator窗口的底部,位于生成问题、搜索结果等旁边。谢谢,这样做了。”。显然,我两次构建同一个文件,导致重复的符号错误。。。我现在知道以后该去哪里了。超级讨厌的虫子。我花了30分钟试图找出这个错误。找不到它,这就是它(相同的函数和所有的lol)+++++++
void virtual Func(MouseEvent*); // Error.
void virtual Func(MouseEvent*) = 0; // Well!