Seite 1 von 1

QT statisch gelinkt benutzen

Verfasst: 19. Dezember 2008 11:10
von nisa06
Hallo,

Ich habe vor QT (4.4.0, GPL Edition) statisch gelinkt zu verwenden und meine geschriebene QT Applikation als eine exe weiterzugeben.

hierzu habe ich wie unter http://doc.trolltech.com/4.4/deployment-windows.html beschrieben die QT nochmal statisch gebaut.

meine applikation wird unter visual 2003 erstellt und mit folgenden Projekt-Einstellungen (fuer Release):
C++/codeerstellung (Laufzeitbibliothek): Multithreaded (/MT)
Linker/Eingabe: qtmain.lib, qtgui4.lib, qtcore4.lib

das zeug uebersetzt und linkt fehlerfrei.
allerdings wird bei ausfuehrung der exe auf einem fremd-rechner (ohne QT) immer noch nach den qt-dlls verlangt (z.B. qtgui4.dll).

Dieses wollte ich aber durch obiges prozedere ja gerade nicht.

Weiss jemand ob das ueberhaupt geht und was ich falsch gemacht haben koennte!?!?
Oder fuehrt kein Weg vorbei dass ich fuer die GPL Version von QT stets die DLL's von Qt mitliefern muss!?

Vielen Dank.

Verfasst: 19. Dezember 2008 12:17
von pfid
Und in der .pro steht config += static ?

hmm

Verfasst: 19. Dezember 2008 12:42
von nisa06
was fuer ne .pro datei !?!? ich uebersetze meinen eigenen quell-code mit visual 2003. der ganze make-prozess wird also nicht mit qmake per hand durchgefuehrt sondern eben ueber visual.

habe hier nen poste gefunden, der empfiehlt in der mkspec directory von QT die qmake.conf anzupassen.

habe ich gemacht und alles nochmal neu gebaut:
1. configure -static ...
2. nmake sub-src
(dauert ca. halbe stunde)
3. im eigenen projekt unter visual 2003 folgende Projekt-Einstellungen (fuer Release):
C++/codeerstellung (Laufzeitbibliothek): Multithreaded (/MT)

4. Alle uebersetzen lassen.

Diesmal bekomme ich aber komischerweise folgende Meldung vom Linker (die es vorher als ich eine nicht-statische QT verwendete) nicht kam:

moc_gui_mainWnd.obj : error LNK2001: Nichtaufgelöstes externes Symbol "public: static struct QMetaObject const QMainWindow::staticMetaObject" (?staticMetaObject@QMainWindow@@2UQMetaObject@@B)

das entsprechende moc-file wurde korrekt erstellt (ging ja vorher mit shared variante).
Und nun obiges. Was kann das sein!?!?

Vielen Dank.

Verfasst: 20. Dezember 2008 00:05
von The User
Finde ich komisch, wenn du qmake als "per Hand" bezeichnest. QMake ist sehr schnell (im Gegensatz zu so configure-Skripts oder auch cmake) und eben ideal für Qt-Programmierung. Außerdem gibt es komfortable GUI-Frontends.

Verfasst: 20. Dezember 2008 01:00
von GoaSkin
Bei einer Übersetzung mit MinGW braucht man die Optionen:

-static -release -fast -no-exceptions

gut... auf -no-exceptions kommt es an. Dieser Parameter stellt sicher, daß wirklich keine DLLs benötigt werden, auch keine Microsoft-DLLs.

Du kannst QT übrigens mit G++/MinGW bauen und trotzdem Visual Studio zum Kompilieren eigener Projekte nutzen, da grundsätzlich alle IDE-Plugins gebaut werden.