Standalone-Application mit QT Full unter MSVC++ 2005
Standalone-Application mit QT Full unter MSVC++ 2005
Hi Leute!
ich hoffe, Ihr könnt mir bei meinem Problem helfen. Seit stunden suche ich nun, wie ich die QT-Lib (oder teile davon) statisch in meine exe linken kann, sodass ich sie nicht mitliefern muss (sondern nur eine datei) habe. auf der recherche bin ich natürlich nicht unfündig geworden:
CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target
(http://wiki.qtcentre.org/index.php?titl ... _with_MSVC)
und dass man configure.exe aufrufen soll. jedoch befindet sich in meinem QT 4.3.4 ordner keine datei dieses namens, und auch keine datei, in dieich diesen CONFIG+=-befehl reinschreiben könnte.
auch die trolltech-doku ist vermeintlich hilfreich (http://trolltech.com/developer/knowledg ... 154694947/) - jedoch weiß ich nicht, was ich tun kann, ohne configure.exe.
hat jemand unter euch die vollversion von QT 4.3.4 oder 4.4.0? weiß jemand, wie ich unter MSVC++2005 die QTLib statisch linken kann? ich weiß aus diversen anderen posts, dass dies möglich ist (zumindest für die OS-Edition von QT)
vielen dank im vorraus für eure hilfe.[/url]
ich hoffe, Ihr könnt mir bei meinem Problem helfen. Seit stunden suche ich nun, wie ich die QT-Lib (oder teile davon) statisch in meine exe linken kann, sodass ich sie nicht mitliefern muss (sondern nur eine datei) habe. auf der recherche bin ich natürlich nicht unfündig geworden:
CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target
(http://wiki.qtcentre.org/index.php?titl ... _with_MSVC)
und dass man configure.exe aufrufen soll. jedoch befindet sich in meinem QT 4.3.4 ordner keine datei dieses namens, und auch keine datei, in dieich diesen CONFIG+=-befehl reinschreiben könnte.
auch die trolltech-doku ist vermeintlich hilfreich (http://trolltech.com/developer/knowledg ... 154694947/) - jedoch weiß ich nicht, was ich tun kann, ohne configure.exe.
hat jemand unter euch die vollversion von QT 4.3.4 oder 4.4.0? weiß jemand, wie ich unter MSVC++2005 die QTLib statisch linken kann? ich weiß aus diversen anderen posts, dass dies möglich ist (zumindest für die OS-Edition von QT)
vielen dank im vorraus für eure hilfe.[/url]
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Wenn Du statisch linken willst musst Du auch qt statisch bauen -> siehe configure.exe --help
Dann hast Du aber immer noch das msvcrt-runtime Problem. Ggf. hilft dann das hier.
Dann hast Du aber immer noch das msvcrt-runtime Problem. Ggf. hilft dann das hier.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
biste dir sicher, dass Du die evaluation-version gesaugt hast? ich kann nämlich auf dem ganzen system keine zu qt gehörige configure.exe finden.
nun ist es aber so, dass ich mir nochma den wiki-eintrag von qtcentre angesehen habe, und dort beschrieben ist, dass man CONFIG += static in eine .pro-file schreiben muss.
doch in meinem test-visual-c++-2005 projectfolder gibt es auch keine .pro datei...
nun ist es aber so, dass ich mir nochma den wiki-eintrag von qtcentre angesehen habe, und dort beschrieben ist, dass man CONFIG += static in eine .pro-file schreiben muss.
doch in meinem test-visual-c++-2005 projectfolder gibt es auch keine .pro datei...
auch dort ist sie leider nicht vorhanden.
edit: es geht mir, nur um das klar zu stellen, nicht darum, die qt bibliothek neu zu kompilieren oder whatever, sondern darum, die beiden zum ausführen nötigen, bisher dynamisch gelinkten dlls QtGui4.dll und QtCore4.dll statisch in die EXE zu linken, sodass ich wirklich nur eine einzige Exe weitergeben muss. Die Laufzeitdateien für C und C++ sind mir derzeit egal.
edit: es geht mir, nur um das klar zu stellen, nicht darum, die qt bibliothek neu zu kompilieren oder whatever, sondern darum, die beiden zum ausführen nötigen, bisher dynamisch gelinkten dlls QtGui4.dll und QtCore4.dll statisch in die EXE zu linken, sodass ich wirklich nur eine einzige Exe weitergeben muss. Die Laufzeitdateien für C und C++ sind mir derzeit egal.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ich habe es hinbekommen, indem ich configure.exe -static (-und nochn paar weitere parameter) aufgerufen habe. die ganze qt wurde damit statisch kompiliert. dann hab ich mit nmake alle projekte im qt-ordner kompiliert, mir nicht ganz darüber im klaren ob notwendig oder nicht. jedenfalls gab es einige compilerfehler bei MSVCRT.LIB... Heute morgen kompiliere ich mit den codegenerierungseigenschaften /MT des projekts mein erstes statisches programm, dessen größe auf über 4mb angeschwollen ist. Gut, es läuft auf meinem Arbeitsrechner einwandfrei, keine fehlermeldungen wg fehlenden DLLs oder Ähnlichem. Aber: Auf ner remotemaschine mit VS05 und QT4.3.4 evaluation läuft es nicht, weil "die anwendungskonfiguraition fehlerhaft" sei.
Auf ner zweiten Remotemaschine jedoch läufts problemlos - allerdings ist hierzu zu sagen, dass auch hier VS05 und QT 4.40 Commercial installiert ist. Liegts nun an der MSVCR oder an der QT-DLL? oder was?
ich dreh bald am rad..
Auf ner zweiten Remotemaschine jedoch läufts problemlos - allerdings ist hierzu zu sagen, dass auch hier VS05 und QT 4.40 Commercial installiert ist. Liegts nun an der MSVCR oder an der QT-DLL? oder was?
ich dreh bald am rad..
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
bin deinem Rat gefolgt. die MSVCR80.DLL wird von einigen modulen ("Function" ist die Spaltenüberschrift) verwandt - viele davon haben kryptische Bezeichnungen...
ich habe QT4.4 nochmal installiert und werde den kram nochmal statisch kompilieren. Eventuell ist mir ja gestern Nachmittag ein Fehler unterlaufen. Hast du eine Idee, wie der Vorgang sich beschleunigen lässt?
An dieser Stelle schonmal vielen Dank für die Hilfestellung, die ich hier bekomme.
ich habe QT4.4 nochmal installiert und werde den kram nochmal statisch kompilieren. Eventuell ist mir ja gestern Nachmittag ein Fehler unterlaufen. Hast du eine Idee, wie der Vorgang sich beschleunigen lässt?
An dieser Stelle schonmal vielen Dank für die Hilfestellung, die ich hier bekomme.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Nicht die Funktionsabhängigkeit sondern die Abhängigkeit einiger Dlls zur msvcrt - die sollte nicht mehr vorhanden sein.
Beschleunigen? examples und demos nicht bauen (nmake sub-src und nmake sub-tools) - mehr wüsste ich nicht. Aufpassen solltest Du dass Qt mit /MT(d) gebaut ist so wie es in der Anleitung steht.
Beschleunigen? examples und demos nicht bauen (nmake sub-src und nmake sub-tools) - mehr wüsste ich nicht. Aufpassen solltest Du dass Qt mit /MT(d) gebaut ist so wie es in der Anleitung steht.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Vielen Dank!
wenn man die anwendung dynamisch linken will, muss man die CRTs und die QtDLLs mitgeben - sowie eine .manifest Datei! ohne diese läuft die Exe eigenartiger weise nicht auf anderen pcs.
beim statischen linken müssen die abhängigkeiten zu den dlls und der manifest gekillt werden... dazu \mkspecs\win32-msvc2005\qmake.conf öffnen und QMAKE_CFLAGS_RELEASE = -O2 -MD durch QMAKE_CFLAGS_RELEASE = -O2 -MT ersetzen. Außerdem bei CONFIG += ... noch "embed_manifest_dll embed_manifest_exe" entfernen. DANN statisch builden (configure.exe -static -release ..." und DANN nmake sub-src ausführen. Voilá! Cool! eine Exe! keine Dlls! noch nichma die von MS! yeah! danke!
viele grüße
wenn man die anwendung dynamisch linken will, muss man die CRTs und die QtDLLs mitgeben - sowie eine .manifest Datei! ohne diese läuft die Exe eigenartiger weise nicht auf anderen pcs.
beim statischen linken müssen die abhängigkeiten zu den dlls und der manifest gekillt werden... dazu \mkspecs\win32-msvc2005\qmake.conf öffnen und QMAKE_CFLAGS_RELEASE = -O2 -MD durch QMAKE_CFLAGS_RELEASE = -O2 -MT ersetzen. Außerdem bei CONFIG += ... noch "embed_manifest_dll embed_manifest_exe" entfernen. DANN statisch builden (configure.exe -static -release ..." und DANN nmake sub-src ausführen. Voilá! Cool! eine Exe! keine Dlls! noch nichma die von MS! yeah! danke!
viele grüße
Wenn du eh MSVC 2005 nutzt, geh doch den sauberen Weg:
Bau deine Qt Application ganz normal mit dynamsichen libs.
Nachher hast du deine Applikation, die ihre Abhängigkeiten von den MSVC-DLL's und von dne Qt DLLs hat, sowie das Manifest. Aber all diese Sorgen musst du dir garnicht machen.
Bau dir als nächstes ein SetupProjekt in MSVC, füge dort dein Qt-ApplikationsProjekt hinzu, und du hast nacher eine schöne Datei zum Ausliefern, aber die Abhängigkeiten sind alle automatisch eingehalten, und sollte auf dem Zielrechner etwas fehlen (z.B. .NET Framework 2.0) so kümmert sich das Setup sauber drum. Ebenfalls autmatisch ist dann die Deinstallationsroutine integriert etc. etc. etc.
Als ich wollte Anfangs auch immer statisch linken, aber ansich bringt es nur Nachteile, und ein sauberes Setupprojekt ist viel Zielführender in meinen Augen.
Grüße Zonk
Bau deine Qt Application ganz normal mit dynamsichen libs.
Nachher hast du deine Applikation, die ihre Abhängigkeiten von den MSVC-DLL's und von dne Qt DLLs hat, sowie das Manifest. Aber all diese Sorgen musst du dir garnicht machen.
Bau dir als nächstes ein SetupProjekt in MSVC, füge dort dein Qt-ApplikationsProjekt hinzu, und du hast nacher eine schöne Datei zum Ausliefern, aber die Abhängigkeiten sind alle automatisch eingehalten, und sollte auf dem Zielrechner etwas fehlen (z.B. .NET Framework 2.0) so kümmert sich das Setup sauber drum. Ebenfalls autmatisch ist dann die Deinstallationsroutine integriert etc. etc. etc.
Als ich wollte Anfangs auch immer statisch linken, aber ansich bringt es nur Nachteile, und ein sauberes Setupprojekt ist viel Zielführender in meinen Augen.
Grüße Zonk