QT DLL's in Unterordner

Verschiedenes zu Qt
Antworten
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

QT DLL's in Unterordner

Beitrag von ape »

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

Beitrag von Christian81 »

d) funktioniert nicht da Windows dies so nicht unterstützt. Mit Linux könnte man den LD_LIBRARY_PATH verbiegen. Was ist das Problem wenn die Dlls im gleichen Ordner wie das executable liegen? Machen doch alle Programme so.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Christian81 hat geschrieben:Machen doch alle Programme so.
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.
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:

Beitrag von Christian81 »

macman hat geschrieben: Genau. Und deshalb findet man in manchen Ordner vor lauter dlls das Programm nicht mehr.
Dafür gibts das Startmenu ;-)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Beitrag von ape »

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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Alternativ könnte man doch sämtliche Programmdateien (exe, dlls) in einen Unterordner packen und im Hauptverzeichnis nur ein Startscript ablegen (und evtl. README, usw). Wäre genauso übersichtlich wie nur die DLLs in ein Unterverzeichnis zu packen.
ape
Beiträge: 44
Registriert: 5. Dezember 2007 15:07

Beitrag von ape »

die Idee klingt komisch im ersten Moment, aber da ist was dran.

Danke

Gruss
ape
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

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 ...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

RHBaum hat geschrieben:Also bleibt Tor 3 ueber .... und hoffen das die user die geschichte mit dem Pfad ned abgschalten haben ....
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 Fehler :-) Selbst schon drauf reingefallen.
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.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Wenn der User z.B. Qt4.1 installiert hat
was noch relativ offensichtlich ist :-)

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 ...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

RHBaum hat geschrieben:qt und andere dlls gleich mal ins system verzeichniss packen ^^
Systemverzeichnis ist immer schlecht, weil sich unterschiedliche Installationen die DLLs gegenseitig überschreiben.
RHBaum hat geschrieben:Ich waer fuer leosung 0 .... exe und dll gehoeren nun mal ins selbe verzeichniss
Das sieht M$ auch so vor, wenn ich das richtig in Erinnerung habe.
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

Beitrag von SchranZViruS »

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
Antworten