Seite 1 von 1

QT-Creator include Problem

Verfasst: 2. Juni 2013 10:41
von Ryu1991
Hey,
ich stehe gerade ganz am Anfang eines neuen Projektes. Das ganze Projekt soll aus 2 Bibliotheken und einer Gui-Anwendung bestehen.
Ich fange also ganz klein an. Erstelle ein neues Bibliotheks projekt, und ein neues Gui projekt.
Dann füge ich dem Gui-Projekt die Bibliothek hinzu.
Und erstelle in der Main einfach nur zu testzwecken die Klasse die von anfang an in der Lib ist, und will das ganze compilieren. Sofort bekomme ich folgenden Fehler: C1083: Datei (Include) kann nicht ge”ffnet werden: "textadventure.h": No such file or directory

Hier ist der Code den der QT-Creator dem .pro file hinzugefügt hat: ,

Code: Alles auswählen

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../Include/Adventure Engine/Gui/build-TextAdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/release/ -lTextAdventureGui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../Include/Adventure Engine/Gui/build-TextAdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/debug/ -lTextAdventureGui
else:unix: LIBS += -L$$PWD/../../../Include/Adventure Engine/Gui/build-TextAdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/ -lTextAdventureGui

INCLUDEPATH += $$PWD/../../../Include/Adventure Engine/Gui/build-TextAdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/debug
DEPENDPATH += $$PWD/../../../Include/Adventure Engine/Gui/build-TextAdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/debug
Ich habe auch schon versucht alle Pfade mit "" zu versehen. Und natürlich ist mir auch aufgefallen dass INCLUDEPATH und DEPENDPATH gar nciht auf die Ordner verweisen in den die Header liegen.
und ich habe versucht sie durch die entsprechenden ordner zu ersetzen, einmal als relativer pfad, und einmal als absoluter.
Das ulkige dabei ist, dass wenn ich im QT-Creator mit der Maus über den Include gehe im tooltip der richtige Pfad angezeigt wird, aber beim Bauen will er dann nicht mehr.

PS: lasst euch nicht von den namen irritieren, die Idee ist, dass ich dann die eigentliche Gui in die Lib packe, sodass ich sie bei mehreren Projekten verwenden kann.

Re: QT-Creator include Problem

Verfasst: 2. Juni 2013 11:13
von Christian81
Leerzeichen im Pfad sie nie eine gute Idee also nimm sie raus und gut ists.

Re: QT-Creator include Problem

Verfasst: 2. Juni 2013 13:31
von Ryu1991
Hey,
du hattest recht, die Leerzeichen im Pfad entfernen hat das Problem gelöst.
Ich konnte jetzt die lib erstellen, einbinden, und das hauptprogramm compilieren.
Allerdings kommt jetzt das nächste Problem, ich will ja die Gui des Programms in der lib haben. Das ganze sieht folgender maßen aus:
Libfiles:

adventuregui.h

Code: Alles auswählen

#ifndef ADVENTUREGUI_H
#define ADVENTUREGUI_H

#include "adventuregui_global.h"
#include <QMainWindow>
#include <QPushButton>

class ADVENTUREGUISHARED_EXPORT AdventureGui : public QMainWindow
{
    Q_OBJECT

public:
    AdventureGui(QWidget *parent = 0);
    ~AdventureGui();

private:
   // QPushButton *TestButton;
};

#endif // ADVENTUREGUI_H
adventuregui.cpp

Code: Alles auswählen

#include "adventuregui.h"


AdventureGui::AdventureGui(QWidget *parent)
    : QMainWindow(parent)
{
    //TestButton = new QPushButton(this);
}

AdventureGui::~AdventureGui(){
    //delete TestButton;
}
und im Gameprojekt die main:

Code: Alles auswählen

#include "game.h"
#include <QApplication>
#include <adventuregui.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    AdventureGui g;
    g.show();
    
    return a.exec();
}
Blöderweise spuckt der Linker jetzt die folgenden fehler:

Code: Alles auswählen

adventuregui.obj:-1: Fehler:LNK2001: Nicht aufgelöstes externes Symbol ""public: static struct QMetaObject const AdventureGui::staticMetaObject" (?staticMetaObject@AdventureGui@@2UQMetaObject@@B)".
adventuregui.obj:-1: Fehler:LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct QMetaObject const * __thiscall AdventureGui::metaObject(void)const " (?metaObject@AdventureGui@@UBEPBUQMetaObject@@XZ)".
adventuregui.obj:-1: Fehler:LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void * __thiscall AdventureGui::qt_metacast(char const *)" (?qt_metacast@AdventureGui@@UAEPAXPBD@Z)".
adventuregui.obj:-1: Fehler:LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual int __thiscall AdventureGui::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@AdventureGui@@UAEHW4Call@QMetaObject@@HPAPAX@Z)".
debug\AdventureGui.dll:-1: Fehler:LNK1120: 4 nicht aufgelöste externe Verweise.
adventuregui.obj existiert allerdings, die liegt im selben verzeichnis wie die lib, was allerdings fehlt ist die DLL, die finde ich nirgendswo

Re: QT-Creator include Problem

Verfasst: 2. Juni 2013 14:43
von Christian81
Wie ist ADVENTUREGUISHARED_EXPORT und linkst Du statisch?

Re: QT-Creator include Problem

Verfasst: 2. Juni 2013 14:53
von Ryu1991
Hey, das ist hier definiert:
adventuregui_global.h

Code: Alles auswählen

#ifndef ADVENTUREGUI_GLOBAL_H
#define ADVENTUREGUI_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(ADVENTUREGUI_LIBRARY)
#  define ADVENTUREGUISHARED_EXPORT Q_DECL_EXPORT
#else
#  define ADVENTUREGUISHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // ADVENTUREGUI_GLOBAL_H

und ich linke Dynamisch

Re: QT-Creator include Problem

Verfasst: 2. Juni 2013 15:36
von Christian81
adventuregui ist eine eigene library, dynamisch und die main.cpp linkt gegen diese lib, korrekt?
Wie sehen deine beiden pro-Dateien dafür aus?

Re: QT-Creator include Problem

Verfasst: 2. Juni 2013 15:44
von Ryu1991
Genau so ist es, hier die .pro files:
Game.pro

Code: Alles auswählen

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Game
TEMPLATE = app


SOURCES += main.cpp\
        game.cpp

HEADERS  += game.h

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../Include/AdventureEngine/Gui/build-AdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/release/ -lAdventureGui
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../Include/AdventureEngine/Gui/build-AdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/debug/ -lAdventureGui
else:unix: LIBS += -L$$PWD/../../../Include/AdventureEngine/Gui/build-AdventureGui-Desktop_Qt_5_0_2_MSVC2010_32bit-Debug/ -lAdventureGui

INCLUDEPATH += D:\C++\Include\AdventureEngine\Gui\AdventureGui
DEPENDPATH += D:\C++\Include\AdventureEngine\Gui\AdventureGui
Adventuregui.pro

Code: Alles auswählen

QT       += widgets

TARGET = AdventureGui
TEMPLATE = lib

DEFINES += ADVENTUREGUI_LIBRARY

SOURCES += adventuregui.cpp

HEADERS += adventuregui.h\
        adventuregui_global.h

unix:!symbian {
    maemo5 {
        target.path = /opt/usr/lib
    } else {
        target.path = /usr/lib
    }
    INSTALLS += target
}
PS: da das ganze nach Konfigurationsfehlern aussieht, und ich mich nicht wirklich mit qmake oder dem QT-Creator auskenne, habe ich das ganze in VS2010 verlegt, was jetzt auch funktioniert