QT-Creator include Problem

Alles zu Entwicklungsumgebungen und Editoren für Qt
Antworten
Ryu1991
Beiträge: 27
Registriert: 11. Mai 2009 09:29

QT-Creator include Problem

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT-Creator include Problem

Beitrag von Christian81 »

Leerzeichen im Pfad sie nie eine gute Idee also nimm sie raus und gut ists.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ryu1991
Beiträge: 27
Registriert: 11. Mai 2009 09:29

Re: QT-Creator include Problem

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT-Creator include Problem

Beitrag von Christian81 »

Wie ist ADVENTUREGUISHARED_EXPORT und linkst Du statisch?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ryu1991
Beiträge: 27
Registriert: 11. Mai 2009 09:29

Re: QT-Creator include Problem

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QT-Creator include Problem

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ryu1991
Beiträge: 27
Registriert: 11. Mai 2009 09:29

Re: QT-Creator include Problem

Beitrag 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
Antworten