Seite 1 von 1

Handling der Qt-Libs

Verfasst: 5. April 2008 16:32
von D.Cent
Ich wollte mal fragen, wie ich das jetzt am besten gestalte:

Ich habe ein Programm auf Linux geschrieben, welches Qt4 benutzt.
Da mich viele Leute nach einer Windows-Version gefragt haben, ich aber kein Windows habe, habe ich das Programm erfolgreich mit einem Crosscompiler kompiliert.

Nun die Frage: Ich will den WIndows-usern nicht zumuten, den 70-MB-grossen Qt-Installer herunterzuladen, um dann noch weitere 200 MB zu installieren. Deshalb habe ich überlegt, dass ich die Qt-Libs lieber mitliefere. Das Problem daran ist, dass ich viele andere Qt-Programme geschrieben habe und jedes einzelne folglich die Qt-Libs mitliefern muss.

Da das ziemlich verschwenderisch gegenüber dem Plattenplatz ist: Gibt es eine einfache Möglichkeit, wirklich nur die Qt-Runtime auf Windows so zu installieren, dass jedes Programm möglichst einfach diese Libraries nutzen kann?

Leider finde ich nur Qt-Installer bei Trolltech, die noch den Sourcecode und die Dokumentation mitliefern, doch die werden ja nicht gebraucht von der Runtime...

Verfasst: 5. April 2008 16:53
von Christian81
Da Du nie weisst welche Qt-Lib z.B. in 'lib' - Verzeichnis (c:\windows\system32) liegt, bleibt Dir nichts anderes übrig als immer alle DLLs mitzuliefern und in das gleiche Verzeichnis wie das executable zu legen.

Verfasst: 6. April 2008 13:20
von C167
ist das eigentlich von microsoft so gewollt oder ein mitgeschleppter designfehler?

Verfasst: 6. April 2008 17:12
von Christian81
Bei den Linux-Distributionen ist es auch nicht anders.

Verfasst: 6. April 2008 21:04
von C167
naja, aber unter Linux wird drauf geachtet, dass die Bibliotheken an einem einheitlichen Platz liegen. Okay, da wird das durch das Packetmanagement ueberwacht/festgelegt, aber ich denke wenn die Anbieter von Windows-Software von Anfang an in ihren Installern da ein wenig aufgepasst haetten waere es nicht so dass heute beinahe jedes Programm seine libs immer mitliefert und im Programmordner ablegt, was ja letztendlich nicht unerheblich Platz kosten kann.

so, gn8, morgen is abi ;)

Verfasst: 7. April 2008 12:24
von RHBaum
Das Problem liegt eigentlich noch viel tiefer.

Linux hat nen systemcompiler .... man kann also davon ausgehen, das das gesamte system mit einem compiler und meist sogar mit den selben flags uebersetzt wurden.

Unter windwos kann man mehrere compiler einsetzen und man hatt dann dementsprechend mehrere runtimes ...

Nun ist aber das generieren der linkersymbole fuer klassennamen sowie die ausrichtung der C++ klassen am Speicher nicht standardisiert. Das kann eigentlich jeder compiler machen wie er moechte ... also sind dll's die klassen exportieren nur binaerkompatibel zu Programmen die mit dem selben compiler uebersetzt wurden ....

Haben wir hier auch schmerzhaft erfahren muessen :-)
Wir haben unsere Programme gegen die Qt uebersetzt und per installationsroutine die qtlibs (waren im namen ja versioniert) ins system 32 gespoolt. Gab ja sogar mal nen CLient setup programm was von trolltech kam ^^ wo eben die qtlibs ins system 32 gespoolt wurden. Aehnlich wie von MS das VS redistributable Pack.

Alles toll, bis nen anderer Anbieter auf die selbe idee kam, nur das der statt dem MS compiler den mingw verwendet hatte ....

Sein setup hat schoen unsere qtlibs ueberschrieben, sein programm lief super, bei uns kamen die segmentation faults ... und wir hatten den aerger mit der fehlersuche.

Fazit:
Bei allem wo ned sicher bist das nur c schnittstellen exportiert werden, vergiss die Idee mit zentraler ablage und leg sie lieber neben die .exe
Von Trolltech gibts auch kein programm mehr, was die qtlibs an ne zentrale stelle schiebt .... ^^

Ciao ....