Hallo, kennt sich jemand mit Qt aus? Ich habe auf Mac das Qt SDK installiert. Nun möchte ich meine Projekte statisch linken. Daszu gibt es eine Anleitung: http://doc.trolltech.com/4.6/deployment-mac.html. Das Problem ist, dass unter Mac nicht die Sourcecodes mit installiert werden. Also habe ich mir mal die Spurces einzeln geladen und auf dem Desktop in dem Ordner ./configure -static make sub-src ausgeführt. Was muss ich jetzt noch tun, um statisch linken zu können? Reicht es, die statischen Librarys, die ich jetzt neu erstellt habe nach /usr/lib zu kopieren? Oder muss ich noch mehr kopieren? Viele Grüße
Max schrieb: > Hallo, > kennt sich jemand mit Qt aus? Ich habe auf Mac das Qt SDK installiert. > Nun möchte ich meine Projekte statisch linken. Daszu gibt es eine > Anleitung: > http://doc.trolltech.com/4.6/deployment-mac.html. > > Das Problem ist, dass unter Mac nicht die Sourcecodes mit installiert > werden. > Also habe ich mir mal die Spurces einzeln geladen und auf dem > Desktop in dem Ordner > > ./configure -static > make sub-src > > ausgeführt. Was muss ich jetzt noch tun, um statisch linken zu können? > Reicht es, die statischen Librarys, die ich jetzt neu erstellt habe nach > /usr/lib zu kopieren? Oder muss ich noch mehr kopieren? Am besten kopierst du gar nichts, sondern installierst Qt. Wenn du sie nicht ins per default verwendete Zielverzeichnis installieren willst, dann mach nochmal ./configure mit zusätzlichem -prefix /dein/zielpfad und ein make (müßte schnell gehen, weil er dazu nicht alles nochmal neu bauen muß) und danach ein make install. Dann erzeugst du für dein Projekt das Makefile nicht mit qmake, sondern mit /dein/zielpfad/bin/qmake. Das setzt dann alle anderen Pfade richtig für die Verwendung einer selbstgebauten Qt.
Naja ich habe Qt ja schon installiert, also die Binaries. Das funktioniert ja auch alles tadellos. Zum entwickeln nehme ich Qt Creator. Nur wollte ich eben statisch linken. Dazu habe ich mir jetzt die Sources geladen und in dem Verzeichnis, in das ich sie geladen habe das oben beschriebene ausgeführt. Hat das da schon etwas installiert? Also in dem Verzeichnis auf meinem Desktop hat es anscheinend die Libs erstellt.
Steht das nicht in dem von dir angegebenen Link? Zumindest Linking the Application to the Static Version of Qt klingt irgendwie danach...
Max schrieb:
> Ja klar aber dazu muss man erst einmal die Qt Lib statisch compilieren.
Genau. Spaß macht's nicht, aber muss halt sein wenn ich micht recht
entsinne.
Das Problem ist ja eben, dass es wie in der Anleitung bei Mac keinen Pfad gibt, wo u.a. configure ist. Also dachte ich mir ich lade mal die Sourcecodes und probiere es damit. Nur jetzt habe ich auf dem Desktop einen Ordner mit dem Sourcecode und den static compilierten Libs. Nur damit kann ich ja jetzt auch noch nichts anfangen.
Max schrieb: > Naja ich habe Qt ja schon installiert, also die Binaries. Das > funktioniert ja auch alles tadellos. Zum entwickeln nehme ich Qt > Creator. Nur wollte ich eben statisch linken. Dazu habe ich mir jetzt > die Sources geladen und in dem Verzeichnis, in das ich sie geladen habe > das oben beschriebene ausgeführt. Hat das da schon etwas installiert? Wie wäre es, wenn du mein Posting liest, und zwar komplett? Installieren kannst du, wie oben beschrieben, mit make install, und dabei wird es, wie oben beschrieben, in das Verzeichnis installiert, das du beim configure mit -prefix gewählt hast.
Max schrieb: > Ja klar aber dazu muss man erst einmal die Qt Lib statisch compilieren. Ach so, jetzt kapiere ich es (auch endlich mal). ;-) Laut http://qtnode.net/wiki/Building_static würde ich sagen nein, den du führst ja nur ein make aus und kein make install. Und der Satz > It is advisable to create a separate directory for your static Qt > setup. For instance if you have a C:\qt\4.1.1\ directory which holds > your standard dynamic Qt libs, you might want to create a directory > called C:\qt\4.1.1-static. liest sich auch so, dass du jetzt noch die Libs selbst verschieben kannst eher sogar musst. ;-) Max schrieb: > Das Problem ist ja eben, dass es wie in der Anleitung bei Mac keinen > Pfad gibt, wo u.a. configure ist. Unter Linux ist configure ein Skript was du ausführst.
1 | ./configure -static <other parameters> |
an dem ./ erkennst du, dass das ein Programm oder Skript im aktuellen Ordner sein muss. ;-) Darum musst du ja laut Anleitung mit dem Befehl
1 | cd /path/to/Qt |
in das Verzeichnis wechseln, wo das configure sich befindet. Habe ich noch nie gemacht, erzähl dann mal ob und wie es geht. ;-) Wie lang kompiliert man da so an einer Qt-Lib eigentlich?
Also der Pfad ist im Moment auf dem Desktop. Da habe ich auch das make sub-src ausgeführt nach configure. Aber wieso sollte ich es mit make install nochmal installieren, wenn ich es schon über den Installer installiert habe?
Max schrieb: > Also der Pfad ist im Moment auf dem Desktop. Da habe ich auch das make > sub-src ausgeführt nach configure. Aber wieso sollte ich es mit make > install nochmal installieren, wenn ich es schon über den Installer > installiert habe? Was für ein Installer? Und wenn du es schon installiert hast, wieso willst du es dann danach nochmal wo anders hinkopieren?
Max schrieb: > Also der Pfad ist im Moment auf dem Desktop. Da habe ich auch das make > sub-src ausgeführt nach configure. Aber wieso sollte ich es mit make > install nochmal installieren, wenn ich es schon über den Installer > installiert habe? Oh man, von klarer Problembeschreibung kann hier aber nicht die Rede sein... -Also, lief configure doch bei dir? -/make sub-src/ lief fehlerfrei durch? -In der Anleitung (von dir) steht ja, dass du die von dir kompilierte Bibliothek irgendwohin verschieben kannst/sollst.
Also nochmal ich habe http://qt.nokia.com/downloads/sdk-mac-os-cpp installiert. Dieser Installer installiert KEINE sources mit, auf die ich configure etc. anwenden kann. Deshalb habe ich mir ncoh extr die Sourcecodes separat geladen, und auf den Desktop kopiert. Dorrt configure und make sub-src gemacht. Jetzt habe ich auf dem Desktop in nem Ordner die static Libs. Und einfach o nach /usr/lib kopieren soll auch nicht sehr sauber sein, habe ich gelesen.
Max schrieb: > Deshalb habe ich mir ncoh extr die Sourcecodes separat geladen, und auf > den Desktop kopiert. Dorrt configure und make sub-src gemacht. Jetzt > habe ich auf dem Desktop in nem Ordner die static Libs. Und einfach o > nach /usr/lib kopieren soll auch nicht sehr sauber sein, habe ich > gelesen. Was ist denn jetzt so schwer daran, nach ./configure && make noch ein make install hinterherzuschieben, dass Dir die Bibliotheken möglicherweise nicht nur in das Zielverzeichnis verschiebt, sondern noch zig tausend andere Sachen mit den .a's und .so's macht, damit sie dann auch benutzbar sind?!? (Gut, bei statischen Libraries passiert da meist nicht mehr als ein simples cp und gelegentlich auch noch das ein- oder andere mkdir oder ln, bei dynamischen Libraries ist das aber schon was anderes.) Im übrigen ist der gesamte Prozess "wie man Qt aus den Sourcen baut" gut dokumentiert und es sei Dir ans Herz gelegt, diese Dokumentation zu lesen und Dich an die dort vorgeschlagenen Schritte zu halten. Stephan
Max, es gab seinerzeit eine App-Note bei Apple (nicht Qt/Trolltech/jetzt Nokia), die vom statischen Linken abrät. Warum MUß es unbedingt statisch sein? Das beste Beispiel, daß man sich statischem Linken ins Bein schießen kann, ist Perl. Apple hat es zumindest bis Leo nicht geschafft, dieses komplett dynamisch zu linken. Damit sind gegen libperl gelinkte Applikationen teilweise nicht zwischen den MacOS-Versionen portabel. Es gibt zwei Möglichkeiten, eine Lib dynamisch zu erstellen: entweder im klassischen Unix-Format als dynamische Library (Endung ".dylib", analog zu ".so" unter Linux), oder als sog. Framework. Letzteres ist nichts anderes als eine Verzeichnisstruktur mit entsprechenden Libraries, allerdings betrachtet MacOS das Verzeichnis als eine art Spezialdatei (vergleichbar zu einer Applikation, welche auch nichts anderes als eine Verzeichnisstruktur darstellt). Wenn Du nun Qt unbedingt an Deine App koppeln möchtest, so wäre mein Vorschlag, Qt als Framework-Bundle innerhalb des Application-Bundles zu integrieren. Dafür müßte es sogar gehen, das offizielle Binary zu verwenden. Man kann auch die .dylibs direkt in einem App-Bundle integrieren, dann müßtest Du Qt aber tatsächlich neu kompilieren und nachträglich entsprechende Pfade sowohl innerhalb der Applikation als auch innerhalb der dylib mit "install_name_tool" bearbeiten. Dafür gab es eine Dev-Note von Trolltech: http://doc.trolltech.com/qq/qq09-mac-deployment.html Viel Erfolg!
Ups, sorry, hab nicht gesehen, daß Dein Link zur 4.6er-Doku mehr oder weniger das gleiche aussagt. (Immerhin haben sie es mittlerweile in die Qt-Doku komplett integriert.)
Max schrieb: > Also nochmal ich habe http://qt.nokia.com/downloads/sdk-mac-os-cpp > installiert. Dieser Installer installiert KEINE sources mit, auf die ich > configure etc. anwenden kann. Das war soweit schon klar. > Deshalb habe ich mir ncoh extr die Sourcecodes separat geladen, und auf > den Desktop kopiert. Dorrt configure und make sub-src gemacht. Jetzt > habe ich auf dem Desktop in nem Ordner die static Libs. Auch klar. Aber oben hast du gesschrieben, daß du die aus den Sourcen compilierte auch schon mit irgendeinem installer installiert hättest und jetzt noch irgendwo kopieren willst. > Und einfach o nach /usr/lib kopieren soll auch nicht sehr sauber sein, > habe ich gelesen. Deshalb sollst du sie ja auch installieren mit 'make install'.
also nach configure und make sub-src noch ein make install? Aber vorher das alte nciht deinstallieren, oder?
Max schrieb: > also nach configure und make sub-src noch ein make install? Aber vorher > das alte nciht deinstallieren, oder? Jein. Zumindest bis Version 3.x war es möglich, inplace zu kompilieren. Man mußte danach im Environment QTDIR auf das entsprechende Verzeichnis setzen, $QTDIR/bin zum PATH hinzufügen und ggf. $QTDIR/lib zu DYLD_LIBRARY_PATH. In so einem Fall war kein make install nötig, sofern man bei configure das entsprechende Verzeichnis auch als -prefix angegeben hat. Ich meine, zumindest in den ersten Versionen von Qt4 war das auch möglich. Sofern Du Deinen Code dann auch übers Terminal kompilierst, müßte es auch ohne Deinstallation der anderen Lib gehen. Ob die Integration in Xcode dann immer noch klappt, weiß ich leider nicht.
Rolf Magnus schrieb: >> Und einfach o nach /usr/lib kopieren soll auch nicht sehr sauber sein, >> habe ich gelesen. > Deshalb sollst du sie ja auch installieren mit 'make install'. In seinem Link steht was anderes. Linking the Application to the Static Version of Qt > The linker will always choose dynamic over static. There are two > solutions: Either move your Qt dynamic libraries (.dylibs) away to > another directory while you link the application and then move them > back, or edit the Makefile and replace link lines for the Qt libraries > with the absolute path to the static libraries. For example, replace > > -lQtGui > > with > > /where/static/qt/lib/is/libQtGui.a Max schrieb: > also nach configure und make sub-src noch ein make install? Aber vorher > das alte nciht deinstallieren, oder? Steht alles in deinem Link. Ich würde die dynamischen Qt-Libs behalten und so linken, wie es angegeben ist. (Siehe auch 5 -10 Zeilen weiter oben.)
Ja aber dazu muss sie ja erst erstmals statisch compiliert werden, und dass ist es nur auf dem Desktop.
Ach das muss ich im Makefile edleren. Aber geht das nciht irgendwie über qt Creator direkt? weil ich compiliere damit...
Max schrieb: > Ja aber dazu muss sie ja erst erstmals statisch compiliert werden, und > dass ist es nur auf dem Desktop. Entweder kapiere ich nicht wie Mac OS X funktioniert, oder du verschiebst den Krempel einfach vom Desktop dahin, wo du es hin haben willst. Oder meinst du. dass das Kompilieren von Qt als statische Libs nur auf dem Desktop funktioniert? Oder meinst du. dass das Kompilieren der statischen gelinkten Anwenungen nur auf dem Desktop funktioniert? Zu QCreator: Keine Ahnung.
Naja ich weiß eben nciht, wo es hin muss. Das ist ja das Problem. Ich glaube ich installiere das ganze einfach mal komplett aus den Sourcecodes.
Max schrieb: > Naja ich weiß eben nciht, wo es hin muss. Das ist ja das Problem. Ich > glaube ich installiere das ganze einfach mal komplett aus den > Sourcecodes. Brauchst du nicht, die Beantwortung meiner Fragen wäre schon mal ein Ansatz. Ich habe nämlich das Gefühl, das wir dir erklären wollen, wie du den Qt-Quellcode zu einer statischen Lib kompilierst und du versuchst mit der bereits fertigen statischen Qt-Lib eine Anwendung zu kompilieren. Das mit dem QCreator dürften wir auch noch hinkriegen... Beim ersten (leicht müden) Blick, -Extras -Einstellungen -Qt4 da kannst du mal rumprobieren...
Link zu schrieb: > Das mit dem QCreator dürften wir auch noch hinkriegen... > Beim ersten (leicht müden) Blick, > -Extras > -Einstellungen > -Qt4 > da kannst du mal rumprobieren... Anscheinend musst du da nur zum richtigen qmake gehen, den Rest kapiert QtCreator so. So richtig test kann ich es natürlich nicht, da ich ja keine statische selbstkompilierte Qt-Version hier habe, auch nicht auf dem Desktop. ;-) Apropos, wie lange hast du denn kompiliert?
Also die Lib hat es erstellt auf dem Desktop in einem Ordner da habe ich jetzt so was: .../Desktop/qt-everywhere-opensource-src-4.6.2/lib/libQtCore.a Also die Lib ist da. Das mit Qt Creator werde ich probieren.
Also funktionieren tut es mit der neuen Version noch nicht. Beim compliieren kommt Es ist keine gültige Qt-Version gesetzt. Setzen Sie sie unter Einstellungen Fehler beim Erstellen des Projekts Test Beim Ausführen des Build-Schritts 'QMake' Erstellen abgebrochen. Und in den Einstellungen steht: ... ist nicht installiert führen sie make install aus. Wenn ich make install mache in dem auf dem Desktop wohin installiert das dann? In dem Verzeichnis auf dem Desktop? Oder irgendwohin nach usr...
Max schrieb: > Wenn ich make install mache in dem auf dem Desktop wohin installiert das > dann? In dem Verzeichnis auf dem Desktop? Oder irgendwohin nach usr... In das Verzeichnis, das dir configure als prefix ausgegeben hat. Wenn du ihm ein -prefix als Kommandozeilenparameter angegeben hast, dann dahin. Und damit sind wir wieder bei meiner ersten Antwort angekommen.
Ja ich weiß ja eben nur nicht, ob sich das mit der Vorhandenen Version verträgt.
Ich habe jetzt mal make install gemacht. Am ende kam: make[4]: *** [../../../../bin/Assistant.app/Contents/MacOS/Assistant] Error 1 make[3]: *** [sub-assistant-install_subtargets-ordered] Error 2 make[2]: *** [sub-tools-install_subtargets-ordered] Error 2 make[1]: *** [sub-assistant-install_subtargets-ordered] Error 2 make: *** [sub-tools-install_subtargets-ordered] Error 2
Max schrieb: > Ja ich weiß ja eben nur nicht, ob sich das mit der Vorhandenen Version > verträgt. Deshalb ja das -prefix! Damit kannst du das an eine selbst ausgewählte Stelle installieren, ohne daß das der anderen Qt in irgendeiner Weise in die Quere kommen würde. Du kannst dir, wenn du willst, 20 verschiedene Qt-Versionen installieren, und wenn die in 20 verschiedenen Verzeichnissen installiert sind, merken die nichts von einander. Um dein Programm mit der gewünschten Qt zu compilieren, mußt du dann nur dafür sorgen, daß das qmake von dieser Qt verwendet wird, um das Makefile zu generieren.
Gut ich habe jetzt trotzdem mal das make neu laufen lassen, auf die sources nach configure -static da kommt das: collect2: ld returned 1 exit status make[4]: *** [../../../../bin/Assistant.app/Contents/MacOS/Assistant] Error 1 make[3]: *** [sub-assistant-make_default-ordered] Error 2 make[2]: *** [sub-tools-make_default-ordered] Error 2 make[1]: *** [sub-assistant-make_default-ordered] Error 2 make: *** [sub-tools-make_default-ordered] Error 2
Gut das soll irgendwas mit Webkit und Sql zu tun haben, also probiere ich jetzt mal das: sudo ./configure -static -no-webkit -no-sql-sqlite -no-sql-sqlite2 -no-sql-sqlite_symbian
sudo? Wieso führst du configure als root aus? Die Fehlermeldung ist etwas seltsam, da sie leider überhaupt keinen Hinweis darauf enthält, wo der Fehler herkommt.
Also der Fehler scheint ein Bug von Qt zu sein. Irgendetwas wird da mehrmals definiert oder so. Ich habe jetzt zuerst einmal Qt dynamisch aus dem Verzeichnis auf dem Desktop ins Standard Verzeichnis installiert. Nun würde ich noch mit ./configure -static und make sub-src die statische lib installieren, damit ich mit CONFIG += static statisch linken kann. Wie sind jetzt genau die Schritte dafür? Muss ich zuerst das configure oder so bereinigen? Irgend etwas stand da glaube ich da, wenn man etwas ändert, das man da vor den neu konfigurieren bereinigen soll? Also erst bereinigen (welche Befehl?) ./configure -static... make sub-src make install ist das so korrekt?
Also ich würde es vermeiden, die beiden Qts irgendwie übereinander zu installieren. Warum installierst du deine statische Qt nicht einfach an eine andere Stelle und benutzt sie dann von dort? Das hab ich schon mehrfach vorgeschlagen, aber du bist nicht darauf eingegangen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.