1

現在のプロジェクトで次のような状況が発生しました: 次のコードを使用してコンパイラによって返された "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]: Entering directoryC:/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"debug" -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: Leaving directoryC:/Entwicklung SVN/debug test/dataSenderReceiverExample' ../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:14: Derived_02 への未定義の参照Derived_02::Derived_02()' ../dataSenderReceiver/debug/libdataSenderReceiver.a(derived.o):C:\Entwicklung SVN\debug test\dataSenderReceiver/derived.cpp:15: undefined reference to:: method()' collect2: ld が 1 の終了ステータスを返しました mingw32-make[1]: * [debug\dataSenderReceiverExample.exe] エラー 1 mingw32-make: * [debug] エラー 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'

助けてください!

4

3 に答える 3

1

次の状況でこの問題が発生しました。


言う

A は実行可能 (fi コンソール) プロジェクトであり、B と C はライブラリ (fi static lib) プロジェクトであり、A は B を使用し、B は C を使用します。

それで

A は .pro ファイル経由で B ライブラリと C ライブラリを認識している必要があり、B は .pro ファイル経由で C ライブラリを認識している必要があります。


言う

A .pro ファイルでは、ライブラリ C はライブラリ B の前に示されます。

LIBS *= -L"../C/debug"
LIBS *= -lC
INCLUDEPATH *= "../C"

LIBS *= -L"../B/debug"
LIBS *= -lB
INCLUDEPATH *= "../B"

それで

まさに上記のエラーが発生します。


解決:

A .pro ファイルで、ライブラリ C の前にライブラリ B に名前を付けます。

LIBS *= -L"../B/debug"
LIBS *= -lB
INCLUDEPATH *= "../B"

LIBS *= -L"../C/debug"
LIBS *= -lC
INCLUDEPATH *= "../C"
于 2011-02-04T22:33:52.057 に答える
1
#include "base_02.h"
#include <QtCore>

である必要があります:

#include <QtCore>
#include "base_02.h"

次に、コンパイルします!

于 2011-02-04T22:31:10.407 に答える