Seite 1 von 2
dynamische QT bibliotheken
Verfasst: 14. Oktober 2006 22:34
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ß
Verfasst: 15. Oktober 2006 00:54
von FlorianBecker
Poste mal deine pro Datei dazu und auch den Code von der main.
Verfasst: 15. Oktober 2006 12:15
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)
Verfasst: 15. Oktober 2006 12:56
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 ...
Verfasst: 15. Oktober 2006 13:08
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ß
Verfasst: 15. Oktober 2006 13:14
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.
Verfasst: 15. Oktober 2006 13:42
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ß
Verfasst: 15. Oktober 2006 14:06
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?
Verfasst: 15. Oktober 2006 14:46
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.
Verfasst: 15. Oktober 2006 14:53
von Christian81
Und wo steht da was von den Libs???
Verfasst: 15. Oktober 2006 19:03
von waldo
ähm ich dachte das wär es:
/LIBPATH:"d:\Programme\Qt\4....
Verfasst: 15. Oktober 2006 20:13
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?
Verfasst: 15. Oktober 2006 20:53
von waldo
oha, man muß den Path und den Name der Library angeben
Ich danke dir für den Tip, ist mir jetzt schon ein bisserl peinlich

.
Nachdem ich das richtige Panel gefunden hab und die Libs eintragen habe funktionierts auch

Jetzt kann ich mich daran versuchen meine Linux Sourcen anzupassen.
Also vielen Dank nochmal
gruß
Verfasst: 15. Oktober 2006 20:57
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

)
Verfasst: 15. Oktober 2006 21:23
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ß