[Tutorial] Qt statisch builden und in Creator einbinden
-
Hallo
Super, habe gerade dein Tutorial gefunden.Es ist mir allerdings nicht klar, warum du nicht einfach einen Update zu dem bestehenden Eintrag gemacht hast.
Überall wo sich etwas geändert hat, kann man ja einfach einen zusätzlichen Abschnitt einfügen. Oder ist alles anders als in dem ursprünglichen Wiki-Eintrag? -
Naja ich war mir nicht so ganz sicher, ob man die Schritte vom Wiki doch vieleicht braucht, oder wozu sie gut sind. Schließlich wird der autor sich was dabei gedacht haben oder ;) Daher dachte ich mir erstmal ein neues zu machen, vielleicht gibt es ja jemanden, der sich da besser auskennt wie ich.
-
Naja, denken tut sich meistens jeder etwas ;-)
Gerolf hat sich mit Sicherheit auch etwas gedacht, allerdings basiert seine Zusammenfassung auf 4.7.4 und es kann sich etwas geändert haben. Mit Sicherheit der MinGW hat sich geändert.
Auf der anderen Seite führen viele Wege nach Rom :D Gerade bei SW ist das so.Deine Versuche mit einem statischen Build von Qt 5.0.2 waren wohl zum Scheitern verurteilt. Für "Qt 5.1 ist folgendes im wiki":http://qt-project.org/wiki/New-Features-in-Qt-5.1#ab851a614e60913de1ec6a6f110159c8 zu finden:
[quote]
Other New FeaturesSupport for Static Qt builds
[/quote]Von einigen wird dies schon als generelle Verfügbarkeit eines statischen Builds gewertet, aber es dreht sich wohl eher um Bugfixes und eine generelle Kompilierbarkeit für statische Libs.
-
Da kann man nur hoffen :D schön wäre es, wenn es von haus aus mit geliefert wird. Aber da es nur für opensource ist, eher unwahrscheinlich.
-
[quote author="QT-static-prgm" date="1372670040"]Da kann man nur hoffen :D schön wäre es, wenn es von haus aus mit geliefert wird. Aber da es nur für opensource ist, eher unwahrscheinlich.
[/quote]
Ich weiss es auch nicht, aber aus meiner Sicht wird es nicht einen Prebuild als statische Libs geben. Es ist wohl weniger ein Problem des opensource als ein Interessenskonflikt mit den Lizenzbedingungen.Aber alles kommt auf die Strategie von Digia an.
-
Wie gesagt da bleibt nur zu hoffen überig. Hast du ahnung von QT und IActiveDesktop?? habe schon alles prpbiert, aber nichts klappt. Habe auch schon Visual Studio bemüht, aber da gibt es auch fehler
-
[quote author="QT-static-prgm" date="1372673665"]Wie gesagt da bleibt nur zu hoffen überig. Hast du ahnung von QT und IActiveDesktop?? habe schon alles prpbiert, aber nichts klappt. Habe auch schon Visual Studio bemüht, aber da gibt es auch fehler[/quote]
Nope, keinerlei Erfahrung. -
Habe es mit der neuen Version probiert. Also Qt 5.1 installiert und dann die libs 4.8.5 static gebuildet. Das Funktioniert genauso wie oben beschrieben
-
[quote author="QT-static-prgm" date="1372956077"]Habe es mit der neuen Version probiert. Also Qt 5.1 installiert und dann die libs 4.8.5 static gebuildet. Das Funktioniert genauso wie oben beschrieben[/quote]
Wenn man die Meldung richtig interpretiert, sollte es nun auch ohne Porbleme möglich sein mit Qt 5.1 die Libs statisch zu erstellen.
-
Das es keine fertigen static-builds gibt liegt meines Wissens weniger an der Strategie von Digia. Ich sehe persönlich auch keine Probleme mit den Lizenzbedingungen (bin aber kein Anwalt;), da es der Lizenz ja egal ist, ob sie auf Source + prebuilt libs gilt oder für Source + self-built libs.
Erfahrungsgemäß ist es einfach sehr schwierig, eine Konfiguration anzubieten, die einen großen Querschnitt der User abdeckt. Benutzer statischer Builds sind da nochmal anspruchsvoller mit Blick auf was rein-/rauskonfiguriert wird, welche Defines gesetzt werden, etc. Am Ende ist es wahrscheinlich sehr viel Arbeit sich auf eine Konfiguration zu einigen und trotzdem werden 90% der Leute, die statische Libs wollen selbser bauen.
Da ist es meiner Meinung nach besser die Zeit in andere Projekte zu stecken.
-
Hallo Tobias
ich möchte es nicht als Kritik an Digia verstanden wissen.
Ich bin auch kein Anwalt. Statisches Linken bedeutet aus meiner Sicht die Inanspruchnahme von GPL (d.h. eigner Source ist dann offen) sobald man die Applikationen verteilt an andere. LGPL geht nur mit dynamischen Libs. Oder statischen Libs mit kommerzieller Lizenz sind eine Möglichkeit. So lege ich die Lizenzvereinbarungen aus.Daher ist es auch von Digia konsequent nur dynamische Libs als pre-build zur Verfügung zu stellen. Diese gelten für GPL und LGPL.
Würde Digia auch noch die statischen Libs zur Verfügung stellen, würde Digia ja auch irgendwie Hand zur Verletzung von LGPL bieten. Da könnte irgendein Anwalt vielleicht schon nachhaken. Aber wie schon angemerkt, ich bin auch kein Anwalt. ;-)
Ein weiterer, zweiter Aspekt wäre dann die Komplexität von statischen Libs für alle möglichen Fälle zu erstellen. Diese Zeit und Serverkapazitäten sind tatsächlich anders besser einzusetzen.
Das Selberbauen ist beim ersten Mal eine Sache und wird mit der Zeit einfacher. Auch für dynamische Libs ist dies bei einigen Kompilern durchaus notwendig. Leider ist auch hier der Anfang schwer.
-
Hi,
also ich habe mich bisher noch nicht so damit auseinander gesetzt, und so nur die Grund konfiguration genutzt :D Aber ich fände es schön, wenn man in Qt z.B. die Konfigurationen unter sagen wir mal Einstellungen einstellen kann, und dann beim ersten builden halt die libs gemacht werden. Fände ich viel besser, als 100 Tuts im Inet zu lesen, und nachher passt dann doch nicht alles.
Übrigens habe ich auch gehört, dass 5.1 statisch builden kann, aber habe es nirgendswo gefunden. Und erlich gesagt, ich glaube nicht, dass die Software dass dann schneller hin bekommt als die Konsole und da ich letztere Variante jetzt gut verstanden habe, habe ich keine Lust mich jetzt wieder damit ausseinander zu setzten.
Nur eins finde ich etwas m,erkwürdig. Bei ein paar Projecten, die bereits bestanden (Bei neuen habe ich es noch nicht probiert) kann ich nicht mehr dynamisch builden. er meint er hätte QApplications,... also eigentlich alle Qxxxxxx headers nicht gefunden.
Hat da jemand eine Idee?? -
[quote author="QT-static-prgm" date="1373274266"]
Nur eins finde ich etwas m,erkwürdig. Bei ein paar Projecten, die bereits bestanden (Bei neuen habe ich es noch nicht probiert) kann ich nicht mehr dynamisch builden. er meint er hätte QApplications,... also eigentlich alle Qxxxxxx headers nicht gefunden.
Hat da jemand eine Idee??[/quote]
Du musst beide Versionen der Qt libs auf deiner Maschine haben. Prinzipiell gilt eine Version, wie du sie für statische Libs erstellt hast, als eine Einheit. Das ganze Gesumms sollte auf einem Folder (z.B. Qt_5_0_1_statisch, oder auch Qt484_static) liegen. Der Name dient nur zur eindeutigen Unterscheidung des Builds.
Falls Du zum Beispiel Qt 4.8.4, das neue Qt 4.8.5 und Qt 5.1.0 mal locker als statisch und dynamisch linken möchtest, braucht das schon etwas Platz auf der Platte. Insgesamt sind dies 6 verschiedene Versionen inklusive qmake und der tools für jede dieser Versionen.
Diese 6 Versionen würdest du in Qt creator als unterschiedliche "Qt Versionen" einbinden und verwenden.
Da ist vieles doppelt und dreifach respektive 6-fach vorhanden. Allerdings solltest du nicht einfach Sachen löschen, sonst hast du schnell eine nicht funktionierende Version.Ich weiss nicht ob eine "automatische" Erstellung der jeweilig notwendigen Libs direkt über den creator so geschickt ist. Das wird schnell komplex, da es verschiedene Konfigurationsmöglichkeiten gibt. Aus meinder Sicht lohnt sich diese Arbeit nicht. Die Anzahl der tutorials lässt sich damit nicht reduizieren, da du diese zum richtigen Konfigurieren innerhalb des creators brauchst. ;-)
Weiterhin hast gesehen, dass der gesamte Prozess etwas dauert. So etwas willst du nicht locker einmal kurz ausversehen auslösen ;-) -
Ja ich habe ja alle libs, dynamisch, static drauf. Sollten zu mindestens.
Ich habe den Ordner Qt5.1, wo Qt komplett installiert ist. Also mit minGW und libs und qmake,.... alles, was man für das ganz normale halt so braucht, und was bei der Installation von Qt mitgeliefert wird. Und dann habe ich den Ordner Qt4.8.5_static. hier liegen nur die 4.8.5 libs, welche ich dann static gebuildet habe. Sollte also alles gehen oder?? -
Du möchtest Qt 5.1 dynamisch und Qt 4.8.5 statisch verwenden?
-
Ja genau. Unten kann ich dann zwischen dy/st und jeweils debugg/release unterscheiden
-
Ein Problem "könnte das widget include":http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 sein. Dies muss bei Qt 5 verwendet werden. Ich weiss nicht, wie sich das genau äussert. Habe gerade erst Qt 5.1 installiert, aber noch nicht angefangen meine Libs zu übersetzen.
[quote author="QT-static-prgm" date="1373278216"]Und dann habe ich den Ordner Qt4.8.5_static. hier liegen nur die 4.8.5 libs, welche ich dann static gebuildet habe. [/quote]
Da sollten nicht nur die statishcen Libs sein, sondern auch ein bin folder mit qmake und dem Zeugs, sowie ein paar andere folder mit includes, etc. Genauso wie auch auf dem vom Download installierten Qt 5.1 es ein bin, include folder geben sollte. -
AH jetzt erinnere ich mich :D
das macht natürlich Sinn. Wenn ich statisch build bekomme ich eine Warnung wegen dem QT += widgets. Daher habe ich es einfach aus der Pro gelöscht, und die Warnung war weg. Für statischz braucht man es scheinbar nicht. Für dynamisch schon :D. Sollte also wieder gehen, wenn ich die Zeile wieder hinzufüge :D
Werde ich gleich mal ausprobieren
-
Der Unterschied kommt nicht von statisch und dynamisch. Du brauchst widgets für Qt 5. Der Rest ist nur eine zufällige Korrelation.
-
Ah ok. Also ist es vollkommen egal, welche libs man hat??
Ah ok jetzt geht es :D
Ich habe gesehen, dass der Creator designer integriert hat, sodass man, wenn man ein neues Projekt anlegt auch innerhalb vom creator mit designer das Fenster ändern kann. Ich habe dann manuel das Window verändert. Doch wurde es leider nicht in der ui Datei geändert, sodass ich jetzt weitere Änderungen nicht im Designer machen kann. Gibt es da eine möglichkeit, meine änderungen in der cpp in die ui zu laden??