QtCreator构建返回collect2:ld返回退出状态1

时间:2009-09-28 03:15:09

标签: c++ qt-creator ld

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

collect2: ld returned 1 exit status

只更改了一些内容(不应该更改构建中的任何重要内容),如果它已经出现,它将会消失,或者如果它不存在则会出现。

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

overriding commands for target 'rock03.o'

ignoring old commands for target 'rock03.o'

以及有问题的错误。

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

由于

10 个答案:

答案 0 :(得分:5)

如果唯一的消息错误是关于链接器的错误,原因可能是您的程序仍在运行且链接器无法访问二进制文件。确保您的应用程序已停止或在仍在运行时将其终止。 在编译之前,Qtcreator永远不会检查先前的运行是否已停止。

答案 1 :(得分:5)

这种情况发生在我身上,因为我在头文件中做了一个声明,然后删除了cpp文件中的函数,我忘了删除标题中的decleration。例如......

 //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

答案 2 :(得分:2)

如果你只是把它作为一个错误,编译器输出真的很有帮助,但第一个候选可能是你仍然打开了输出程序,并且它无法写入文件,因为那个'我会给你一个像这样的单独的collect2错误

答案 3 :(得分:2)

由于链接问题,也可能发生此错误,例如,您忘记使用'extern'指令从头文件声明一些静态变量。

答案 4 :(得分:1)

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

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();
}
关闭对话框时,

不会关闭应用程序(至少对我而言)。

解决方案是始终创建主窗口,并确保关闭它。

答案 5 :(得分:1)

在我的情况下,它声明了清晰的虚函数。

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

答案 6 :(得分:1)

就我而言,文件夹权限是问题所在。 检查“编译输出”窗口对于找出确切的问题至关重要。(QtCreator在这方面与Visual Studio相反,因此需要一定的习惯。)我尝试设置权限正确,但是之后似乎不起作用,最后我停用了影子构建,然后转到“工具/选项/构建与运行/常规/项目目录”,并将“目录”设置为“。”。然后终于编译了。它是Qt 5.11中的kmap2qmap项目。

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

答案 7 :(得分:0)

错误可能有更多原因。但对我来说,在从班级中删除未使用的SLOTS时,问题就解决了。

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

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