在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在构建之前并没有抱怨任何事情。
由于
答案 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文件链接两次。