Compiler-Fehler "collect2: Id zurückgegeben, 1 exit status" mit Klassen mit QObject (QT 4.7 mit Qt-Creator)
Ich habe folgende situation in meinem aktuellen Projekt: "collect2: Id zurückgegeben, 1 exit status" zurückgegeben, indem der compiler mit den folgenden 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();
}
Der compiler sagt Folgendes:
...
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 -Wand -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_CORE_LIB -DQT_THREAD_SUPPORT -ich"......\Qt\2010.04\qt\include\QtCore" -I"......\Qt\2010.04\qt\include" -I"..\dataSenderReceiver" -ich"......\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: Warnung: unused variable 'abgeleitet'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,Konsole -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.eine(abgeleitete.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/abgeleitet.cpp:14: undefined reference toDerived_02::Derived_02()'
Derived_02::Methode()'
../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:15: undefined reference to
collect2: ld zurückgegeben, 1 exit status
mingw32-make[1]: * [debug\dataSenderReceiverExample.exe] Fehler 1
mingw32-make: * [debug] Fehler 2
Der 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 'Machen'
Bitte um Hilfe!!
InformationsquelleAutor 70sCommander | 2011-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
werden:
Dann kompiliert!
InformationsquelleAutor 70sCommander
Ich habe dieses problem in der folgenden situation:
Sagen
Einen ist eine ausführbare Datei (. f.ich. Konsole) Projekt-und
B und C sind in der Bibliothek (f.ich. statische lib) Projekte und
A benutzt B und B verwendet C.
Dann
Einen hat, weiß, B-Bibliothek und C-Bibliothek über .pro-Datei und
B weiß, C-Bibliothek über .pro Datei.
Sagen
in der Ein .pro-Datei-Bibliothek, C ist bezeichnet, vor der Bibliothek B:
Dann
genau den oben beschriebenen Fehler accures.
Lösung:
Namen Bibliothek B Bibliothek C Ein .pro Datei:
InformationsquelleAutor MathMatX
InformationsquelleAutor Amr Balti