QT DLL's in Unterordner
QT DLL's in Unterordner
Hallo,
meine .exe benötigt u.a. um auf einem nicht entwicklungs-Rechner
lauffähig zu sein:
* QtCore4.dll
* QtGui4.dll
* QtNetwork.dll
* qextserialport.dll sowie
* mingwm10.dll
Die mir bekannten Wege sind:
a) die entsprechenden Files im Windows Ordner unterbringen. Bloed da der User dafuer Admin sein muss.
b) Die Files direkt im Ordner der exe liegen lassen
c) dll's reinlinken
Existiert auch ne Möglichkeit:
d) Die benötigten DLL's innerhalb meinem Programmfolder in einen Unterordner zu legen ?
Wenn ja, wie muss ich das im .pro File vermerken ?
Gruss
ape
meine .exe benötigt u.a. um auf einem nicht entwicklungs-Rechner
lauffähig zu sein:
* QtCore4.dll
* QtGui4.dll
* QtNetwork.dll
* qextserialport.dll sowie
* mingwm10.dll
Die mir bekannten Wege sind:
a) die entsprechenden Files im Windows Ordner unterbringen. Bloed da der User dafuer Admin sein muss.
b) Die Files direkt im Ordner der exe liegen lassen
c) dll's reinlinken
Existiert auch ne Möglichkeit:
d) Die benötigten DLL's innerhalb meinem Programmfolder in einen Unterordner zu legen ?
Wenn ja, wie muss ich das im .pro File vermerken ?
Gruss
ape
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Genau. Und deshalb findet man in manchen Ordner vor lauter dlls das Programm nicht mehr. Ich hätte es auch lieber in Unterordnern, aber das geht leider nicht. Vom Systemverzeichnis kann man nur abraten.Christian81 hat geschrieben:Machen doch alle Programme so.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Hallo,
also System-Verzeichnis finde ich auch aus diversne Gründen unschön.
Die DLL's im gleichen Folder abzulegen ist möglich klar, aber da stimme ich
Macman absolut zu, darunter leidet oft die Übersicht und Struktur im Programm-Verzeichnis.
Sehe ich es richtig dass ich damit auf den Weg des DLL verlinkens limitiert bin ?
bzgl Startmenü:
da ich (weitere Vorgabe) keinen installer basteln soll,
da das Programm an sich auch von CD, USB, Netzwerk o.ä ohne Install funktionsfähig sein soll, fehlt mir bis dato auch der Eintrag im Windows -Startmenü :/
Aus interesse und des lernens willens: wie kann ich das machen ? Habt ihr mir ein Stichwort zu diesme Thema ?
Gruss
ape
also System-Verzeichnis finde ich auch aus diversne Gründen unschön.
Die DLL's im gleichen Folder abzulegen ist möglich klar, aber da stimme ich
Macman absolut zu, darunter leidet oft die Übersicht und Struktur im Programm-Verzeichnis.
Sehe ich es richtig dass ich damit auf den Weg des DLL verlinkens limitiert bin ?
bzgl Startmenü:
da ich (weitere Vorgabe) keinen installer basteln soll,
da das Programm an sich auch von CD, USB, Netzwerk o.ä ohne Install funktionsfähig sein soll, fehlt mir bis dato auch der Eintrag im Windows -Startmenü :/
Aus interesse und des lernens willens: wie kann ich das machen ? Habt ihr mir ein Stichwort zu diesme Thema ?
Gruss
ape
windows versucht dll's ohne komplette pfadangabe nach folgender Reihenfolge zu finden
- selbes verzeichniss wie exe
- was in den System verzeichnissen liegt (system system32)
- alle was in der PATH enviroment variable gesetzt ist .... (kann ueber registry abgeschalten werden)
Mannuelles laden mit pfadangaben faellt bei der qt raus, weil die dlls durch ne lib geladen werden ... die sicher ned ueberschreiben willst
Also bleibt Tor 3 ueber .... und hoffen das die user die geschichte mit dem Pfad ned abgschalten haben ....
du willst die pfadangabe ausserdem nicht jedesmal von Hand anpassen
Dann hasst nur noch das Problem, dass du vor dem aufruf von loadlibrary aus den QT .libs kommen musst. Wenn du davor kommst, kannst den PATH um dein verzeichniss erweitern ....
Problem ist, das davorkommen und das zu dem punkt auch die QT ned verwenden duerftest (da nicht geladen) ....
Oder alternativ ne exe schreiben, die die path variable setzt und dann mit nem systemcall den prozess mit der eigentlichen Variable ueberlagert.
ne batch wuerde auch gehen faend ich aber ned wirklich elegant ....
Darfst in der ersten exe natuerlich keine dlls verwenden, was das ermitteln des pfades in denen dein executiable liegt bisserl zu ner frikelei macht. Geht aber !
Wie machst du das dann eigentlich mit der msvc runtime ? links du die immer statisch, oder verlaesst dich drauf das die user das aktuelle Pack haben ....
ich find die dll's im App verzeichniss gar ned so unelegeant.
wir schreiben eh viel plugins, die ueber nen Manager aus nem pluginverzeichniss geladen werden ... so kann man die system dlls und die plugin dlls gut auseinanderhalten
Ciao ...
- selbes verzeichniss wie exe
- was in den System verzeichnissen liegt (system system32)
- alle was in der PATH enviroment variable gesetzt ist .... (kann ueber registry abgeschalten werden)
Mannuelles laden mit pfadangaben faellt bei der qt raus, weil die dlls durch ne lib geladen werden ... die sicher ned ueberschreiben willst
Also bleibt Tor 3 ueber .... und hoffen das die user die geschichte mit dem Pfad ned abgschalten haben ....
du willst die pfadangabe ausserdem nicht jedesmal von Hand anpassen
Dann hasst nur noch das Problem, dass du vor dem aufruf von loadlibrary aus den QT .libs kommen musst. Wenn du davor kommst, kannst den PATH um dein verzeichniss erweitern ....
Problem ist, das davorkommen und das zu dem punkt auch die QT ned verwenden duerftest (da nicht geladen) ....
Oder alternativ ne exe schreiben, die die path variable setzt und dann mit nem systemcall den prozess mit der eigentlichen Variable ueberlagert.
ne batch wuerde auch gehen faend ich aber ned wirklich elegant ....
Darfst in der ersten exe natuerlich keine dlls verwenden, was das ermitteln des pfades in denen dein executiable liegt bisserl zu ner frikelei macht. Geht aber !
Wie machst du das dann eigentlich mit der msvc runtime ? links du die immer statisch, oder verlaesst dich drauf das die user das aktuelle Pack haben ....
ich find die dll's im App verzeichniss gar ned so unelegeant.
wir schreiben eh viel plugins, die ueber nen Manager aus nem pluginverzeichniss geladen werden ... so kann man die system dlls und die plugin dlls gut auseinanderhalten
Ciao ...
Viele Überlegungen, aber Tor 3 geht nicht. Wenn der User z.B. Qt4.1 installiert hat und Du benötigst Qt4.3, dann werden im Pfad wahrscheinlich als erstes die 4.1 DLLs gefunden. Und dann suchst Du dir nen Wolf nach dem FehlerRHBaum hat geschrieben:Also bleibt Tor 3 ueber .... und hoffen das die user die geschichte mit dem Pfad ned abgschalten haben ....
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
was noch relativ offensichtlich istWenn der User z.B. Qt4.1 installiert hat
Schlimmer ist wenn der user tools installiert hat, die dir die qt und andere dlls gleich mal ins system verzeichniss packen ^^
Ich waer fuer leosung 0 .... exe und dll gehoeren nun mal ins selbe verzeichniss, wenn wan bei dem windows suchmechanismus sichergehen will ....
Ciao ...
Systemverzeichnis ist immer schlecht, weil sich unterschiedliche Installationen die DLLs gegenseitig überschreiben.RHBaum hat geschrieben:qt und andere dlls gleich mal ins system verzeichniss packen ^^
Das sieht M$ auch so vor, wenn ich das richtig in Erinnerung habe.RHBaum hat geschrieben:Ich waer fuer leosung 0 .... exe und dll gehoeren nun mal ins selbe verzeichniss
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
-
SchranZViruS
- Beiträge: 31
- Registriert: 3. Februar 2008 01:33
Ich würde die Programme einfach in einen Unterordner (bin) machen, in den auch die DLLs kommen und im Hauptverzeichnis n Link reinsetzen... falls du dann noch Startmenüeinträge machen willst musst du die glaub ich direkt mit der exe verlinken, weil ich nicht weiß ob link -> link -> exe geht... (ich bezweifle es)
Des weiteren würde ich dir raten, falls du keine exceptions benutzt, die mingwm10.dll zur compile zeit raus zu feuern, da das ne ünnöttige Datei ist (geht auch wenn du threads benutzt weil Qt eigentlich keine eceptions benutzt):
in der benötigten mkspecs (win32-g++):
- alle Vorkommen von -mthreads entfernen-
- ich persönlich ersetze noch -fexceptions durch -fno-exceptions
Qt konfigurieren:
./configure -fno-exceptions
danach dein Programm nochmal durch qmake jagen und neu kompilieren
Des weiteren würde ich dir raten, falls du keine exceptions benutzt, die mingwm10.dll zur compile zeit raus zu feuern, da das ne ünnöttige Datei ist (geht auch wenn du threads benutzt weil Qt eigentlich keine eceptions benutzt):
in der benötigten mkspecs (win32-g++):
- alle Vorkommen von -mthreads entfernen-
- ich persönlich ersetze noch -fexceptions durch -fno-exceptions
Qt konfigurieren:
./configure -fno-exceptions
danach dein Programm nochmal durch qmake jagen und neu kompilieren