Standalone-Application mit QT Full unter MSVC++ 2005

Alles rund um die Programmierung mit Qt
Antworten
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Standalone-Application mit QT Full unter MSVC++ 2005

Beitrag von hunsrus »

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]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

auf diesen Link bin ich bereits gestoßen - allerdings scheint er sich auf die open-source version von qt zu beziehen.
ich allerdings benutze die commercial version von qt4. im installationsordner findet sich also leider keine configure.exe die ich aufrufen könnte.
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Configure.exe müsste eigentlich da sein, die liegt bei mir in jedem Qt-Verzeichnis mit drin (Downloadvarianten mit- und ohne sources).
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

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...
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Wieso "evaluation"-Version? Du redest doch die ganze Zeit von der commercial? Ob die Testversion ne configure.exe mit ausliefert ist mir nicht bekannt...in der "richtigen" commercial ist die Datei jedenfalls dabei.
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn Du ne kommerzielle Version hast ist eine configure.exe dabei. Die Anleitung auf qtcentre bezieht sich nicht explizit auf die Opensource-Version.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

in der tat - die configure.exe ist bei der kommerziellen dabei. entschuldigt, ich habe mich versehentlich noch auf die evaluation copy bezogen.

ich werde es gleich nochmal versuchen... mit neuen erkenntnissen ;)
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

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..
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du hast noch nicht alles mit /MT übersetzt - deshalb die Fehler. Nimm Dependency Walker und schau wer noch msvcrt80(d).dll benötigt und übersetze die entsprechenden Module mit /MT(d) neu.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
hunsrus
Beiträge: 18
Registriert: 16. Juli 2008 11:54

Beitrag von hunsrus »

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
Zonk
Beiträge: 51
Registriert: 17. September 2006 15:28
Kontaktdaten:

Beitrag von Zonk »

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
Antworten