Seite 1 von 1
qt unter windows
Verfasst: 29. Dezember 2010 16:38
von ps100
Hallo
Ich arbeite mit CGAL und verwende dabei Qt. Nun habe ich das ganze unter linux programmiert und habe (uni) die Aufgabe das ganze satisch zu linken, was mir nicht gelingen will.
Nun würde ich es gerne unter Windows versuchen (statisch zu linken). Gleich die erste Frage: Ist das eine gute Idee oder ist es unter Windows gleich hoffnungslos komplett satisch zu linken wie unter Linux?
Nun habe ich mal Qt installiert. Ich nehme an nun sollte ich (wie unter linux) configure ausführen (mit -static flag). Wenn ich das mache erhalte ich folgende Fehlermeldung:
cpdir: Failure to create C:\...\Qt\4.7.1\mkspecs\default
Couldn't update default mkspec! Does C:\...\mkspecs\win32-++ exist?
Den Ordner gibt es ...
Nun zur 2ten Frage: Wo kann hier das Problem liegen bzw. was kann ich da machen?
lg
ps
Verfasst: 30. Dezember 2010 09:58
von Christian81
Zu statisch linken -> Foren-Suche
Compilieren unter Windows:
http://doc.trolltech.com/4.7/install-win.html oder das SDK benutzen - dort sind schon vorkompilierte gcc Libs dabei.
Verfasst: 14. Februar 2011 16:44
von ps100
Ich bin nun wieder am Thema ...
vorab die Frage nochmal: ist es überhaupt vernünftig es unter windows zu versuchen oder bin ich unter linux besser dran mit dem statisch linken?
Zu den Fehlern die ich unter Linux erhalte melde ich mich dann zu einem späteren Zeitpunkt noch - bin gerade nicht auf meinem Rechner ...
gesucht zum Thema statisch linken habe ich nämlich schon recht viel ...
lg
Verfasst: 15. Februar 2011 09:25
von RHBaum
Meine Meinung:
Statisch linken will man, um die Abhaengigkeiten zu den dyn. Bibs aufzuloesen/die zu vermeiden. Eigentlich in sich nen Widerspruch, weil eben dyn. Bibs paar Vorteile haben.
Aber, auch nen riesen Nachteil, der bei groesseren modularen projecten zum tragen kommt. Versionsabhaengigkeit.
- Nicht alle Qt Versionen sind binaer abwaertskompatibel. Hasst Plugins die 4.7.x vorraussetzen und ne MainApp, die mit 4.4.x irgendwas arbeitet, brauchen die zwingend unterschiedliche dyn. bibs.
- Bei projecten mit C Interfacen koennten module mit anderen Compilern geschrieben werden. wieder unterschiedliche dyn. bibs notwendig.
Situation unter linux:
Durch das intelligente dyn. laden mit den Verweissen über versionen, koenn(t)en unter linux qt in mehreren versionen vorliegen und gleichzeitig verwendet werden.
Unterschiedliche Compiler sind unter Linux/Unix eher kein Thema, da bekommt man an anderen Stellen zu viele Probleme ...
Situation windows:
- gibt kein systemcompiler
- gibt kein versionierungssystem fuer bibliotheken
wenn unterschiedliche versionen brauchst innerhalb einer App, hasst keine chance unter windows, wenn die dinger gleich heissen. Damit bist bei qt soweiso am Arsch
Auswege:
migrieren (neu uebersetzen) oder eben statisch linken.
Ergo: wenn statisch linken, dann macht es IMHO unter windows eher Sinn.
Ciao ...
Verfasst: 15. Februar 2011 10:46
von ps100
Hallo
mal Danke ...
Hmm die Frage ist ein bisschen ob es unter Windows einfacher ist als unter Linux ...
Hintergrund dass ich es überhaupt machen muss ist: Ich habe ein Projekt an der Uni ... und ich sollte das so abgeben dass man am besten gar nichts installieren muss ...
daher stellt sich die Frage nicht obs Sinn macht oder nicht

... meine Frage ist nur wo/wie ich es am leichtesten hin bekomme?
Auswahl wäre Windows oder Linux (mal aus meiner Sicht) - und hier vielleicht die Zusatzfrage welche Linux Distribution hier am geeignetsten wäre ...
eben nicht geschafft habe ich es schon mit Ubuntu
DANKE
Verfasst: 15. Februar 2011 11:00
von peter999
Hallo PS100
Es ist eigentlich kein Problem, ohne "Installation" das Zeugs zum Laufen zu bringen. Es reicht, ein Verzeichnis zu erstellen, dort das oder die Programme und die notwendigen QT DLLs reinzukopieren. Wenn Du Plugins brauchst, einfach ein Verzeichnis dort erstellen mit dem Namen "plugins" und dort die Plugins reinkopieren.
Wenn Du fertig bist, einfach z.B. 7zip benutzen um eine selbst entpackende Datei mit dem kompletten Programmverzeichnis zu erstellen.
Je nach verwendetem Compiler brauchst Du eventuell noch das vcredist_x86 für Deinen Compiler...
Mit der Vorgehensweise hast Du auch keine Lizenzprobleme (LPGL) wenn Du keine kommerzielle Lizenz gekauft hast....
Gruß aus Franken
Peter
Verfasst: 15. Februar 2011 11:13
von RHBaum
@ PS100
eigentlich sollte fuers linken es equivalent zu anderen Problemen immer lauten:
dynamisch linken wo geht, statisch linken wo musst !
Dlls nicht mitliefernwollen iss eher nen schlechter Grund für statische linken.
Dlls werden in windows in der "defaulteinstellung" an folgenden orten gesucht (reihenfolge !)
- im gleichen verzeichniss wie deine App (.exe)
- in allen pfaden die im PATH (Systemvariable) stehen
- systemverzeichnisse (/windows /windows/system32 ... )
Also wie peter999 richtig beschreibt, dlls mitausliefern und einfach ins selbe verzeichnis der exe kopieren lassen, fertig.
um die vcredist_x86 wirst ned drumherumkommen, wenn die nicht schon auf dem rechner da hasst.
Theorethisch koenntest das verhindern in dem du gegen die c/c++ runtime statisch linkst (muss dann aber deine exe und auch alle dlls, also auch die qt dlls) ... aber davon raten die Qt developer strengstens ab.
Ciao ...
Verfasst: 15. Februar 2011 14:11
von ps100
hmmm danke für die Antworten
interessanter Gedanke - und der Gedanke gefällt mir auch
ABER
dann bin ich wohl nicht Plattformunabhängig ... damit kann ich wohl auch leben - aber Windows darf dann die gewählte Plattform eher nicht sein ...
das müsste dann unter Linux sein ... (außerderm verwende ich auch CGAL und da ists unter Linux einfacher)
funktioniert da das mitliefern der dynamischen Bibliotheken gleich?
Verfasst: 19. Februar 2011 15:59
von progger1986
Ich habe weitere folgende Probleme:
-jpegs laden unter Vista: Wie es scheint kann Qt 4.7 unter Vista keine jpegs laden
-QGLWidget: Unter Windows kann ich ein Frameless QGLWidget als Toplevel Window nehmen.
--Edit: Ist leider im falschem Thread gelandet. Falls der Admin diesen post löscehn kann, so kann er dies gerne tun.
Verfasst: 21. Februar 2011 12:38
von RHBaum
funktioniert da das mitliefern der dynamischen Bibliotheken gleich?
Das linken fuer dich funktioniert fast gleich
du gibst statt der importlib zum linken bei windows, die .so (dynamische lib) direkt an unter linux. Das executiable Format
ELF ist in der Lage dynamische libs selber anzuziehen ohne importlib oder explizietes dlopen.
Unterschied ist nur Verteilungsprozess.
Einfach nen verzeicniss wie in windows geht unter linux schlecht
Bei linux muesstest du drauf bestehen, dass die qt in einer passenden version vorliegt, und gegebenfalls auf ein package fuer deine distri zu verweissen.
Alternativ ... machen einige, find ich aber ned so prall ...
gibst du nen Skeleton fuer nen startstript mit, wo der user noch das verzeichniss anpassen muss, woraus er grad die app startet. deneben liegen die .so's und vor dem start des Binaries wird LD_LIBRARY_PATH um den angegebenen pfad noch erweitert, das die so.s gefunden werden.
Wie gesagt, Installer gibt es auch nicht in der Form unter linux, sondern eher packages. in nem package gibst an, von welchen biblios dein prog abhaengt, inklusive der version. Und das package system kuemmert sich dann um den Rest. Nur so hasst unter linux die chance, zeugs sauber und in die richtigen Verzeichnisse zu kriegen.
Linux ist da bissi restrictiver wie windows, und das ist auch gut so ....
Unter linux heisen die teile .so "shared objects" also da wird mehr wert auf die gemeinsamme verwendung von unterschiedlichen Programmen heraus gelegt. was natuerlich bissi mehr Aufwand fuers sauberhalten des systems bedeutet ...
Ciao ...