Seite 1 von 1

Statisch linken

Verfasst: 14. Juni 2011 19:13
von Krischu
Plattform Windows 7/64
Qt 4.7.4/32

Schönen guten Tag. Bin neu hier. Meine erste Frage:

Ich habe ein Projekt gebaut (sqlitebrowser.exe). sqlite3.obj scheint statisch eingebunden zu sein. Brauche also schon mal keine sqlite3.dll. Wenn ich aber die EXE irgendwo starten will, erscheint eine Alertbox, die da sagt, daß Qt3Support4.dll fehle.

Nicht so, wenn ich die Release-Exe aus dem QtCreator heraus starte.

Würde gerne eine statisch gelinkte EXE bauen, wo ich dann keine
zusätzlichen DLLs verschicken muß.

Läßt sich das im Projekt im QtCreator irgendwie einstellen?

Danke und Grüße

--
Christoph

Verfasst: 15. Juni 2011 15:17
von RHBaum
Eine Dll wirst immer brauchen. und zwar die c/c++ runtime. Weil, wenn ich die trolltechler richtig verstanden hab, sich die qt nicht gegen eine statisch gelinkte runtime compilieren laesst.
Was auch immer die fuer schmutz da machen.

Was aber viel schlimmer ins Auge sticht:
Qt 4.7.4/32
Qt3Support4.dll

Du verwendest qt3 klassen unter qt4 ?
Warum ? oder linkst was, was eigentlich ned brauchst ?

Prinzipiell kannst du die Qt auch statisch linken.
aber da wird dir kein passendes Installationspacket angeboten.
Du musst die qt dann selbst compilieren und bauen.

Also die Source distri downloaden und auspacken.
Install und Readme files lesen ... Install und Readme files nochmal lesen ...
dann am Cmd-Prompt dein configure mit den richtigen parametern aufrufen -> Siehe: Install und Readme files lesen

Ab hier hab ichs noch ned gemacht, sondern ich hab immer VC verwendet, da gibts leichte unterschiede :-)

aber am Cmd-Prompt make -f dein_zuständiges_maekefile aufrufen, und kaffeetrinken gehen, sollte so falsch ned sein ...

Danach das Komplette verzichniss an den richtigen Ort kopieren (weiss ned wie und wo das unter mingw am besten ist, bei VC ist c:\Qt\4.7.4_static ne gute wahl)

In deinem Build Tool (QT Creator) die neue Version einpflegen bzw die QT-variablen setzen (bei mir macht das QT plugin fuer VC) und kompilieren.

Bei vorhandenen projekten kann noch sein, das die linker einstellungen fuer die qt libs anpassen musst. bei mir aendern die sich von qtcore4d.lib auf qtcored.lib usw. keine ahnung warum die libs sich beim uebersetzen dann unterscheiden ....

Deine exe sollte dann nur noch die c++ runtimes brauchen, oder du hasst uns abhengigkeiten verschwiegen :-)
Die c++ runtimes fuer den gcc wirst beilegen muessen. Beim VC werden die vom Windows Update meist mit distributiert, oder es gibt fertig downloadbare installationspackete (redistributables).

Manchmal ist es halt einfacher auf der dunklen Seite der Macht .... aber nur manchmal :-)

Ciao ...

Verfasst: 15. Juni 2011 16:31
von Krischu
RHBaum hat geschrieben:Eine Dll wirst immer brauchen. und zwar die c/c++ runtime. Weil, wenn ich die trolltechler richtig verstanden hab, sich die qt nicht gegen eine statisch gelinkte runtime compilieren laesst.
Was auch immer die fuer schmutz da machen.

Was aber viel schlimmer ins Auge sticht:
Qt 4.7.4/32
Qt3Support4.dll

Du verwendest qt3 klassen unter qt4 ?
Warum ? oder linkst was, was eigentlich ned brauchst ?
Ich baue nur ein vorhandenes Projekt (sqlitebrowser). Das ist halt so eingestellt.
Aber ich sehe gerade, daß die wohl auch einen Haufen Qt-DLLs mit ausliefern:

Qt3Support4.dll
QtCore4.dll
QtGui4.dll
QtNetwork4.dll
QtSql4.dll
QtXml4.dll
libgcc_s_dw2-1.dll
mingwm10.dll

Muß mich wohl damit abfinden. Es sei denn ich steige voll ein und baue den ganzen Summs. Aber das Nachstehende - danke für die Ausführlichkeit! - kann mich eher nicht Erwärmen, mir das anzutun.

Ich benutze VS2008 innerhalb des QtCreator. Jedenfalls interessant zu lesen, daß es auch den umgekehrten Weg geht, Qt in VS2008 zu Kompilieren. Ja, irgendwie muß man ja mal zu einer ausführbaren Version von QtCreator gekommen sein. Sei es mit MinGW oder mit MSVC.

RHBaum hat geschrieben: Prinzipiell kannst du die Qt auch statisch linken.
aber da wird dir kein passendes Installationspacket angeboten.
Du musst die qt dann selbst compilieren und bauen.

Also die Source distri downloaden und auspacken.
Install und Readme files lesen ... Install und Readme files nochmal lesen ...
dann am Cmd-Prompt dein configure mit den richtigen parametern aufrufen -> Siehe: Install und Readme files lesen
Würde es lieber vorziehen, nmake oder VS zu benutzen.
RHBaum hat geschrieben:
Ab hier hab ichs noch ned gemacht, sondern ich hab immer VC verwendet, da gibts leichte unterschiede :-)

aber am Cmd-Prompt make -f dein_zuständiges_maekefile aufrufen, und kaffeetrinken gehen, sollte so falsch ned sein ...

Danach das Komplette verzichniss an den richtigen Ort kopieren (weiss ned wie und wo das unter mingw am besten ist, bei VC ist c:\Qt\4.7.4_static ne gute wahl)

In deinem Build Tool (QT Creator) die neue Version einpflegen bzw die QT-variablen setzen (bei mir macht das QT plugin fuer VC) und kompilieren.

Bei vorhandenen projekten kann noch sein, das die linker einstellungen fuer die qt libs anpassen musst. bei mir aendern die sich von qtcore4d.lib auf qtcored.lib usw. keine ahnung warum die libs sich beim uebersetzen dann unterscheiden ....

Deine exe sollte dann nur noch die c++ runtimes brauchen, oder du hasst uns abhengigkeiten verschwiegen :-)
Die c++ runtimes fuer den gcc wirst beilegen muessen. Beim VC werden die vom Windows Update meist mit distributiert, oder es gibt fertig downloadbare installationspackete (redistributables).

Manchmal ist es halt einfacher auf der dunklen Seite der Macht .... aber nur manchmal :-)

Ciao ...
Danke noch mal,

Christoph

Verfasst: 16. Juni 2011 13:26
von RHBaum
Ich benutze VS2008 innerhalb des QtCreator.
Haeh ?
Dann bist Du ja schon halb auf der Dunklen Seite :-) Bruder ! :twisted:
Warum nutzt du den QTCreator ???
die VS-IDE ist doch um Welten "toller" :-)
Oder Nutzt du gar nur Express Version ? Abtruenniger ! :twisted:
kann mich eher nicht Erwärmen, mir das anzutun.
Besser nutzt man auch die Energie, um nen tolles Setup zu bauen. Das Danken einem die Jüngerer um welten mehr, als das man nur ne exe irgendwohin kopieren braucht und aufzurufen ! (ohne verknuepfung auf Desktop findet der Frischling das doch nie wieder nach dem naechsten reboot :twisted: ).

Ciao ...

Verfasst: 16. Juni 2011 14:39
von ScyllaIllciz
Statisch Linken hat schon seine Daseinsberechtigung und funktioniert sehr gut auch mit MSVC. Man darf nur die lizenzrechtliche Seite nicht vergessen/unterschätzen.

Aber ich denke auch das heutzutage ein Setup schnell erstellt ist und es mehr Komfort für den Endbenutzer bietet (Verknüpfungen usw.)

Verfasst: 16. Juni 2011 16:43
von Krischu
Vielleicht reden wir aneinander vorbei oder ich habe nicht die richtige Terminologie benutzt.

Ich benutze normalerweise VS2008 und VS2010 um .Net-Anwendungen zu entwickeln.

Jetzt brauchte ich eine aktuelle Version von SQLiteBrowser (Sourceforge).
Um die zu bauen, mußte ich erst mal Qt installieren, weil es im Sourcetree von SQLitebrowser nur ein Qt-Project gibt. Da ich aber nicht noch MinGW installieren wollte und ohnehin VSDEV 9 und 10 schon installiert habe, benutze ich den VS C-Compiler aus Qt-Creator heraus. Weiß nicht, ob das in dem Projectfile bereits eingestellt war, oder ob ich das durch Aufrufen von Qmake auf der Kommandozeile konfiguriert habe.

Soweit zur Benutzung von VS (MSVC) aus Qt-Creator heraus.

Ich finde zwar Qt-Creator ganz nett , aber eigentlich will ich im Moment nicht noch ein neues IDE, nach VS, Netbeans, Eclipse lernen :( sondern nur eine .EXE bauen, die ich benutzen will.

Evtl. dachte ich, die auch anderen zur Verfügung zu stellen, deshalb die Frage nach dem stat. Linken.

Im Moment gelingt es mir nicht, die erzeugte .EXE außerhalb des Qt-Creators aufzurufen, weil dann jede Menge DLLs fehlen, angefangen mit Qt3support4.dll (im PRO-File steht übrigens QT += qt3support, warum auch immer).

Meint Ihr, ich komme besser weg, wenn ich ganz Qt im VS kompiliere und zu meinem Projekt SQLItebrowser hinzufüge?


--
Grüße
Christoph

Verfasst: 16. Juni 2011 17:14
von RHBaum
Also Fakt ist:
QT-Dlls nutzen keine C-Dll Schnittstellen.
d.h. deine QT Dlls muessen mit dem compiler uebersetzt sein, mit dem auch die .exe uebersetzt wird.

übersetzt mit dem VS compiler, solltest an fertig compilierte qt-dlls rankommen (Ausser VS 2010, weil das wird offiziell noch ned supoorted von der QT)
Aber es ist nicht so schwer, das auch selber zu machen ... (bei VS 2010 musst es soweiso)

Statsich linken der Qt ist sicher auch viel gschmackssache. Mit dem linkerthema musst dich eh auseinandersetzen. Also wird ichs vom featurewunsch abhaengig machen. willst keine qt-dlls mit zu der exe ausliefern wollen ->statisch.


Ciao ...