编译器错误“collect2: Id returned 1 exit status”将类与 QObject 一起使用(带有 Qt Creator 的 QT 4.7)
我当前的项目中出现以下情况:编译器使用以下代码返回“collect2: Id returned 1 exit status”:
#ifndef BASE_02_H
#define BASE_02_H
#include <QtCore>
class Base_02
{
public:
Base_02();
virtual void method()=0;
};
#endif // BASE_02_H
#include "base_02.h"
#include <QtCore>
Base_02::Base_02()
{
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef DERIVED_02_H
#define DERIVED_02_H
#include <QtCore>
#include "base_02.h"
class Derived_02 : public Base_02
{
public:
Derived_02();
void method();
};
#endif // DERIVED_02_H
#include "derived_02.h"
#include <QtCore>
Derived_02::Derived_02()
{
}
void Derived_02::method()
{
qDebug() << "Derived_02::method()";
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef BASE_H
#define BASE_H
#include <QtCore>
class Base : public QObject
{
Q_OBJECT
public:
Base(Base* p=NULL);
virtual void method()=0;
};
#endif // BASE_H
#include "base.h"
#include <QtCore>
Base::Base(Base* p)
{
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef DERIVED_H
#define DERIVED_H
#include <QtCore>
#include "base.h"
class Derived : public Base
{
Q_OBJECT
public:
Derived(Derived* p=NULL);
void method();
};
#endif // DERIVED_H
#include "derived.h"
#include "derived_02.h"
#include <QtCore>
Derived::Derived(Derived* p)
{
}
void Derived::method()
{
Derived_02 d;
d.method();
}
//----------------------------------------------------------------------------------------------------------------------------------
#include <QtCore/QCoreApplication>
#include <QtCore>
#include "base.h"
#include "derived.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Derived* derived = new Derived();
return a.exec();
}
编译器显示以下内容:
... mingw32-make:进入目录
C:/Entwicklung SVN/debug test/dataSenderReceiverExample' C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]:进入目录
C:/Entwicklung SVN/debug test/dataSenderReceiverExample' g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"......\Qt\2010.04\qt\include\QtCore" -I".... ..\Qt\2010.04\qt\include" -I"..\dataSenderReceiver" -I"......\Qt\2010.04\qt\include\ActiveQt" -I"调试" -I"... ...\Qt\2010.04\qt\mkspecs\win32-g++" -o debug\main.o main.cpp main.cpp:在函数“int main(int, char**)”中: main.cpp:14:警告:未使用的变量“派生” g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\dataSenderReceiverExample.exe debug/main.o -L"c:\Qt\2010.04\qt\lib" -L../dataSenderReceiver/debug -ldataSenderReceiver -lQtCored4 mingw32-make[1]:离开目录C:/Entwicklung SVN/debug test/dataSenderReceiverExample' mingw32-make:离开目录
C:/Entwicklung SVN/debug test/dataSenderReceiverExample' ../dataSenderReceiver/debug/libdataSenderReceiver.a(衍生.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/衍生.cpp:14: 未定义引用Derived_02::Derived_02()' ../dataSenderReceiver/debug/libdataSenderReceiver.a(衍生.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/衍生.cpp:15: 未定义引用
Derived_02::method()' Collect2: ld 返回 1 退出状态 mingw32-make[1]: * [debug\dataSenderReceiverExample.exe] 错误 1 mingw32-make: * [调试] 错误 2 Prozess“C:/Qt/2010.04/mingw/bin/mingw32-make.exe”将在 Rückgabewert %2 中运行。 Fehler beim Erstellen des Projekts dataSenderReceiverExample(Ziel:桌面) Beim Ausführen des Build-Schritts 'Make'
请帮忙!
I've got the following situation in my current project: "collect2: Id returned 1 exit status" returned by the compiler using the following code:
#ifndef BASE_02_H
#define BASE_02_H
#include <QtCore>
class Base_02
{
public:
Base_02();
virtual void method()=0;
};
#endif // BASE_02_H
#include "base_02.h"
#include <QtCore>
Base_02::Base_02()
{
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef DERIVED_02_H
#define DERIVED_02_H
#include <QtCore>
#include "base_02.h"
class Derived_02 : public Base_02
{
public:
Derived_02();
void method();
};
#endif // DERIVED_02_H
#include "derived_02.h"
#include <QtCore>
Derived_02::Derived_02()
{
}
void Derived_02::method()
{
qDebug() << "Derived_02::method()";
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef BASE_H
#define BASE_H
#include <QtCore>
class Base : public QObject
{
Q_OBJECT
public:
Base(Base* p=NULL);
virtual void method()=0;
};
#endif // BASE_H
#include "base.h"
#include <QtCore>
Base::Base(Base* p)
{
}
//----------------------------------------------------------------------------------------------------------------------------------
#ifndef DERIVED_H
#define DERIVED_H
#include <QtCore>
#include "base.h"
class Derived : public Base
{
Q_OBJECT
public:
Derived(Derived* p=NULL);
void method();
};
#endif // DERIVED_H
#include "derived.h"
#include "derived_02.h"
#include <QtCore>
Derived::Derived(Derived* p)
{
}
void Derived::method()
{
Derived_02 d;
d.method();
}
//----------------------------------------------------------------------------------------------------------------------------------
#include <QtCore/QCoreApplication>
#include <QtCore>
#include "base.h"
#include "derived.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Derived* derived = new Derived();
return a.exec();
}
The compiler says the following:
...
mingw32-make: Entering directoryC:/Entwicklung SVN/debug test/dataSenderReceiverExample'
C:/Entwicklung SVN/debug test/dataSenderReceiverExample'
C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"......\Qt\2010.04\qt\include\QtCore" -I"......\Qt\2010.04\qt\include" -I"..\dataSenderReceiver" -I"......\Qt\2010.04\qt\include\ActiveQt" -I"debug" -I"......\Qt\2010.04\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
main.cpp: In function 'int main(int, char**)':
main.cpp:14: warning: unused variable 'derived'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\dataSenderReceiverExample.exe debug/main.o -L"c:\Qt\2010.04\qt\lib" -L../dataSenderReceiver/debug -ldataSenderReceiver -lQtCored4
mingw32-make[1]: Leaving directoryC:/Entwicklung SVN/debug test/dataSenderReceiverExample'
C:/Entwicklung SVN/debug test/dataSenderReceiverExample'
mingw32-make: Leaving directory
../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:14: undefined reference toDerived_02::Derived_02()'
Derived_02::method()'
../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:15: undefined reference to
collect2: ld returned 1 exit status
mingw32-make[1]: * [debug\dataSenderReceiverExample.exe] Error 1
mingw32-make: * [debug] Error 2
The Prozess "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" wurde mit dem Rückgabewert %2 beendet.
Fehler beim Erstellen des Projekts dataSenderReceiverExample (Ziel: Desktop)
Beim Ausführen des Build-Schritts 'Make'
Please help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
必须是:
然后它就可以编译了!
has to be:
Then it compiles!
我在以下情况下遇到了这个问题:
说
A 是一个可执行(fi 控制台)项目并且
B 和 C 是库(fi static lib)项目并且
A 使用 B,B 使用 C。
那么
A 必须通过 .pro 文件了解 B 库和 C 库,并且
B 必须通过 .pro 文件了解 C 库。
假设
在 A .pro 文件中,库 C 在库 B 之前表示:
那么
就会出现上述错误。
解决方案:
在 A .pro 文件中将库 B 命名在库 C 之前:
I got this problem in the following situation:
Say
A is an executable (f.i. console) project and
B and C are library (f.i. static lib) projects and
A uses B and B uses C.
Then
A has to know B library and C library via .pro file and
B has to know C library via .pro file.
Say
in the A .pro file library C is denoted before library B:
Then
exactly the error described above accures.
Solution:
Name library B before library C in the A .pro file: