8

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

collect2: ld returned 1 exit status

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

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

overriding commands for target 'rock03.o'

ignoring old commands for target 'rock03.o'

以及有问题的错误。

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

谢谢

4

10 回答 10

5

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

于 2009-09-28T07:51:39.153 回答
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
于 2012-02-26T06:39:24.207 回答
2

如果您只是将其视为错误,则编译器输出非常有用,但第一个候选者可能是您仍然打开了输出程序,并且它无法写入文件,因为这会给您像这样的一个单独的 collect2 错误

于 2010-05-10T14:02:40.417 回答
2

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

于 2010-11-09T22:49:01.877 回答
2

就我而言,文件夹权限是问题所在。检查“编译输出”窗口对于找出问题所在至关重要。(QtCreator在这方面与Visual Studio相反,所以需要一些时间来适应。)我尝试正确设置权限,但之后似乎没有用,最后我停用了影子构建,然后我去了“Tools/Options/Build&Run/General/Projects Directory”并将“Directory”设置为“.”。然后它终于编译了。“它”是 Qt 5.11 中的 kmap2qmap 项目。

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

于 2018-08-06T15:03:51.573 回答
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();
}

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

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

于 2011-06-30T20:01:40.847 回答
1

在我的例子中,它声明了明确的虚函数。

void virtual Func(MouseEvent*); // Error.
void virtual Func(MouseEvent*) = 0; // Well!
于 2013-01-13T16:25:34.283 回答
0

错误的原因可能还有很多。但对我来说,从课堂上删除未使用的 SLOTS 后,问题就解决了。

于 2011-01-12T06:06:05.947 回答
0

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

于 2012-02-10T13:59:29.130 回答
-1

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

于 2009-11-08T07:36:05.190 回答