dynamische QT bibliotheken

Verschiedenes zu Qt
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

dynamische QT bibliotheken

Beitrag von waldo »

Hi,
versuche ein einfaches "Hallo world" zu compelieren, das geht ja noch aber beim linken bekomme ich Fehler in folgender Art:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QApplication::~QApplication(void)" (__imp_??1QApplication@@UAE@XZ) referenced in function _main

Ich denke das die dll's nicht bekannt sind aber wie mache ich diese VC++ (2005 express) bekannt ?

gruß
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Poste mal deine pro Datei dazu und auch den Code von der main.
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

Also eine pro Datei benutze ich nicht (jedenfalls nicht wissentlich;)). Der Code ist eigentlich banal, na eben das typische Hello World:
#include "stdafx.h"
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{

QApplication app(argc, argv);

QPushButton hello("Hello world!");
hello.resize(100, 30);

hello.show();
return app.exec();


}

Ich wollte das Programm mit den Mitteln der VC++ Anwendung compelieren und linken.
gruß

edit: hab die error report von VC++ mit eingestellt:
Build Log Build started: Project: Test2, Configuration: Debug|Win32
Command Lines Creating temporary file "d:\ProgrammingProjects\Test2\Test2\Debug\RSP00000F35922032.rsp" with contents
[
/OUT:"D:\ProgrammingProjects\Test2\Debug\Test2.exe" /INCREMENTAL /LIBPATH:"d:\Programme\Qt\4.2.0\bin" /LIBPATH:"d:\Programme\Qt\4.2.0\lib" /MANIFEST /MANIFESTFILE:"Debug\Test2.exe.intermediate.manifest" /DEBUG /PDB:"d:\ProgrammingProjects\Test2\debug\Test2.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 kernel32.lib

".\Debug\stdafx.obj"

".\Debug\Test2.obj"

".\Debug\Test2.exe.embed.manifest.res"
]
Creating command line "link.exe @d:\ProgrammingProjects\Test2\Test2\Debug\RSP00000F35922032.rsp /NOLOGO /ERRORREPORT:PROMPT"
Output Window Linking...
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QApplication::~QApplication(void)" (__imp_??1QApplication@@UAE@XZ) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QPushButton::~QPushButton(void)" (__imp_??1QPushButton@@UAE@XZ) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static int __cdecl QApplication::exec(void)" (__imp_?exec@QApplication@@SAHXZ) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWidget::show(void)" (__imp_?show@QWidget@@QAEXXZ) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWidget::resize(int,int)" (__imp_?resize@QWidget@@QAEXHH@Z) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QPushButton::QPushButton(class QString const &,class QWidget *)" (__imp_??0QPushButton@@QAE@ABVQString@@PAVQWidget@@@Z) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z) referenced in function _main
Test2.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QApplication::QApplication(int &,char * *,int)" (__imp_??0QApplication@@QAE@AAHPAPADH@Z) referenced in function _main
D:\ProgrammingProjects\Test2\Debug\Test2.exe : fatal error LNK1120: 9 unresolved externals
Results Build log was saved at "file://d:\ProgrammingProjects\Test2\Test2\Debug\BuildLog.htm"
Test2 - 10 error(s), 0 warning(s)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Erst alles von Hand machen und dann keine Ahnung haben. Naja. Es fehlen, wie man sehr schön sehen kann, die Qt-libs ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

Naja, ich weiß das ich nicht sonderlich vertraut mit der Einbindung der QT Libiries bin (wollt es mal versuchen weil unter Linux das debuggen nicht so komfortabel ist).
Soweit ich das sehe wird der Pfad zu den lib's übergeben (/OUT:"D:\ProgrammingProjects\Test2\Debug\Test2.exe" /INCREMENTAL /LIBPATH:"d:\Programme\Qt\4.2.0\bin" /LIBPATH:"d:\Programme\Qt\4.2.0\lib"). In dem Verzeichnis sind die erzeugten QT libs. Weißt du in welcher lib die fehlenden klassen/Infos sind ? Vielleicht ist ja bei der Erzeugung der libs was schief gelaufen.

gruß
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nimm bitte pro-Files - das ist wesentlich einfacher!

Wo welche Klassen sind, sieht man in der Doku
QString -> QtCore(d)4.dll
QApplication -> QtGui(d)4.dll

Für Debug braucht man also QtCored4.lib und QtGuid4.lib und für Release QtCore4.lib und QtGui4.lib. Aber qmake würde Dir das alles automatisch setzen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

Kann ich denn mir pro files arbeiten und trotzdem den Debugger von Microsoft benutzen ? Wie würde denn so ein pro file aussehen für das einfache Hello World ?
Ich vermute mal das Problem ist, das ich die QT Libs ohen Debuginfos erzeugt habe und jetzt via Debugmodus (aus VC++) die exe erzeugen will und das paßt wohl nicht zusammen. Liege ich da richtig ?

Gruß
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

waldo hat geschrieben:Kann ich denn mir pro files arbeiten und trotzdem den Debugger von Microsoft benutzen ?
ja, siehe qmake-Optionen (-tp)
Wie würde denn so ein pro file aussehen für das einfache Hello World ?
siehe Qt-Tutorial
[/quote]
Ich vermute mal das Problem ist, das ich die QT Libs ohen Debuginfos erzeugt habe und jetzt via Debugmodus (aus VC++) die exe erzeugen will und das paßt wohl nicht zusammen. Liege ich da richtig ?
Nein das ist erstmal kein Problem (wobei ich ziemlich sicher bin, dass Du debug und release erstellt hast...), warum fügst Du icht einfach die Libs hinzu und schaust was passiert?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

ich dachte das die OT libs schon includiert wären:
/OUT:"D:\ProgrammingProjects\Test2\Debug\Test2.exe" /INCREMENTAL /LIBPATH:"d:\Programme\Qt\4.2.0\bin" /LIBPATH:"d:\Programme\Qt\4.2.0\lib" /MANIFEST /MANIFESTFILE:"Debug\Test2.exe.intermediate.manifest" /DEBUG /PDB:"d:\ProgrammingProjects\Test2\debug\Test2.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 kernel32.lib

Wo gibt man denn noch die Libs an bzw. ich hab die Libs bei der Linker Option mit angegeben.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo steht da was von den Libs???
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

ähm ich dachte das wär es:
/LIBPATH:"d:\Programme\Qt\4....
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

waldo hat geschrieben:/LIBPATH:
English für Anfänger - was bedeuted PATH?
Ist es denn so schwer die beiden Libs im Klicki-Bunti VisualStudio hinzuzufügen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

oha, man muß den Path und den Name der Library angeben :shock:
Ich danke dir für den Tip, ist mir jetzt schon ein bisserl peinlich :oops: .
Nachdem ich das richtige Panel gefunden hab und die Libs eintragen habe funktionierts auch :P
Jetzt kann ich mich daran versuchen meine Linux Sourcen anzupassen.
Also vielen Dank nochmal

gruß
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ist doch genau wie bei Linux, oder habe ich da irgendwas übersehen? :)
Und wie gesagt - ich würde pro-Files verwenden oder was platformunabhängiges wie cmake (ja, ich mach schon wieder Werbung dafür ;) )
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
waldo
Beiträge: 22
Registriert: 14. Oktober 2006 14:45

Beitrag von waldo »

Ich benutz(t)e kdevelop für meine Source und da war die Unterstützung wohl schon drin, jedenfalls kann ich mich nicht mehr erinnern das ich libs angegeben hatte.
cmake? hast du da einen Link für mich ?
gruß
Antworten