Hallo, ich beschäftige mich erst seit kurzem mit Linux, speziell Ubuntu und einigen Embedded Boards. Mit Qt habe ich ein Programm geschrieben und möchte dieses jetzt für andere zur Verfügung stellen, so dass diese das auch auf Ihren Rechnen nutzen können. Bei Windows würde ich jetzt ein Installationspacket mit den notwendigen Qt Bibliotheken und der EXE erstellen. Dafür verwende ich Install Jammer. Wie mache ich das ganze jetzt bei Linux und was muss ich alles mitliefern, damit das System auch bei den anderen läuft? Danke
Martin J. schrieb: > Wie mache ich das ganze jetzt bei Linux und was muss ich alles > mitliefern, damit das System auch bei den anderen läuft? Wenn dein Programm Open-Source sein darf: Schreib ein makefile, s.d. man es mit "make && make install" kompilieren & installieren kann, und liefere das zusammen mit dem Source Code aus. Dann kann sich das jeder für sein System compilen. Wenn du Langeweile hast kannst du noch Pakete für verbreitere Linux Distributionen wie Ubuntu machen (siehe Google wie das jeweils geht). Da schreibst du dann rein dass Qt installiert sein soll (Abhängigkeit), dafür sorgt dann der Package Manager beim installieren. Wenn du deinen Source nicht herausrücken willst, musst du das Programm compilen und zusammen mit allen benötigten Libraries (Qt und alle dessen Abhängigkeiten etc.) in ein .tar.bz2 Archiv packen und das ausliefern. Dazu ein Readme welche Datei im Archiv man starten muss um das Programm zu starten. Das ist die Möglichkeit mit dem geringsten Aufwand (insbesondere für die User) Nicht-Open-Source Software für Linux zu verteilen.
Dr. Sommer schrieb: > Wenn du deinen Source nicht herausrücken willst, dann kann er natürlich dennoch Distributionspakete bauen. Das hat mit Open-Source rein gar nichts zu tun.
Fred schrieb: > dann kann er natürlich dennoch Distributionspakete bauen. Das hat mit > Open-Source rein gar nichts zu tun. Achja stimmt, er kann natürlich alle benötigten Libraries mit in das Distributions-Paket packen.
Er kann vor allem die benötigten Libraries einfach nicht selbst packen, sondern die Pakete der Distribution als Abhängigkeit nutzen. Ist ja nicht so, daß Qt exotisch wäre.
Fred schrieb: > Er kann vor allem die benötigten Libraries einfach nicht selbst > packen, > sondern die Pakete der Distribution als Abhängigkeit nutzen. Ja, dann muss er alle Nase lang sein Programm neu kompilieren & ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht er das nicht ist das Programm in einiger Zeit nur noch mit großem Aufwand installierbar...
Dr. Sommer schrieb: > Ja, dann muss er alle Nase lang sein Programm neu kompilieren & > ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht > er das nicht ist das Programm in einiger Zeit nur noch mit großem > Aufwand installierbar... Warum? Die Bibliotheken selber und die Packager achten normalerweise sehr auf Binärkompatibilität. Wenn deine Abhängigkeiten richtig sind (z.B. "qt-4.8"), dann machen die üblichen Linux-Packagemanager auch kein ungefragtes Update auf eine nicht-kompatible Version (qt-5) Ich kann hier noch problemlos Programme ausführen, die vor vielen, vielen Jahren (ältestes was grad griffbereit rumliegt: Dez. 2005) kompiliert wurden.
Dr. Sommer schrieb: > Ja, dann muss er alle Nase lang sein Programm neu kompilieren & > ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht > er das nicht ist das Programm in einiger Zeit nur noch mit großem > Aufwand installierbar... Blödsinn. Schau dir docjh einfach mal in einer beliebigen Linux-Distri an, wie die Pakete da aussehen. Die Paketnamen reichen schon.
Dr. Sommer schrieb: > Ja, dann muss er alle Nase lang sein Programm neu kompilieren & > ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht > er das nicht ist das Programm in einiger Zeit nur noch mit großem > Aufwand installierbar... Qt ist aufwärtkompatibel, also alles mit Qt 4.0 kompilierte läuft auch mit Qt-Versionen die größer gleich 4.0 sind. Εrnst B✶ schrieb: > Wenn deine Abhängigkeiten richtig sind (z.B. "qt-4.8"), dann machen die > üblichen Linux-Packagemanager auch kein ungefragtes Update auf eine > nicht-kompatible Version (qt-5) Qt5 ist größtenteils kompatibel zu Qt4. Kompiliert läuft alles, außer es sind einige der wenigen Qt-Klassen verwendet worden, die in Qt5 rausgeflogen sind. Diese Klassen sind aber schon immer (Qt 4.0) als deprecated markiert. Beim Kompilieren gilt das selbe, außer, dass einige Header-includes angepasst werden müssen. Alles weitere: http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 http://www.kdab.com/porting-from-qt-4-to-qt-5/ http://www.heise.de/developer/artikel/C-Framework-Was-sich-mit-Qt-5-aendert-1784154.html und speziell: http://www.heise.de/developer/artikel/C-Framework-Was-sich-mit-Qt-5-aendert-1784154.html?artikelseite=4
1 | Ein Qt-4-Programm funktioniert auch nach der Auslieferung von |
2 | Qt 5 ohne jegliche Probleme weiter. |
könnt ihr mir einen Linux-Packagemanager empfehlen, der mir das ganze etwas erleichtert.
Martin J. schrieb: > könnt ihr mir einen Linux-Packagemanager empfehlen, der mir das ganze > etwas erleichtert. https://www.google.de/#q=deb+build+package https://www.google.de/#q=ppa+ubuntu Und bitte ein eigenes repo aufmachen, dann reicht ein Eintrag in der /etc/apt/sources.list um automatisch mit Updates versorgt zu werden. Tausendmal besser als dieser ganze install.exe Rotz.
Martin J. schrieb: > könnt ihr mir einen Linux-Packagemanager empfehlen, der mir das > ganze > etwas erleichtert. Der, der bei der jeweiligen Distribution mitgeliefert ist... apt bei debian (ubuntu, ...), portage bei Gentoo, pacman bei Arch, RPM bei Red Hat etc. etc. Εrnst B✶ schrieb: > Warum? Die Bibliotheken selber und die Packager achten normalerweise > sehr auf Binärkompatibilität. Ah, ist ja schön dass das bei Qt so ist. Es gibt aber jede Menge Bibliotheken, bei denen das nicht so ist. Und wenn man dann eine alte Software ausführen will muss man irgendwo im Internet die alten Bibliotheken ausgraben und installieren. Um die Sache noch lustiger zu machen sind manche Bibliotheken ja nichtmal in der selben Version kompatibel, wenn verschiedene ./configure -Optionen angegeben wurden.
Dr. Sommer schrieb: >> Warum? Die Bibliotheken selber und die Packager achten normalerweise >> sehr auf Binärkompatibilität. > Ah, ist ja schön dass das bei Qt so ist. Es gibt aber jede Menge > Bibliotheken, bei denen das nicht so ist. Und wenn man dann eine alte > Software ausführen will muss man irgendwo im Internet die alten > Bibliotheken ausgraben und installieren. Um die Sache noch lustiger zu > machen sind manche Bibliotheken ja nichtmal in der selben Version > kompatibel, wenn verschiedene ./configure -Optionen angegeben wurden. Jetzt hör endlich mit deinen Ammenmärchen auf! DIe Distributionen achten da sehr genau drauf. Da passiert ganz selten mal was.
ich würde mein Programm gern mit den benötigten Bibliotheken verteilen. nach der Struktur app /lib /lib/platforms Die benötigten Bibliotheken für Qt habe ich schon mit "ldd ./app" aus findig gemacht und zusammen kopiert. Weiterhin habe ich auch schon den "platforms" Ordner unter linux in mein Projekt kopiert. Was muss ich jetzt noch beachten, bzw. alles machen damit das gelingt und mein Programm auch auf einem anderem Rechner läuft. Momentan bekomme ich immer den Fehler, dass die Bibliotheken nicht gefunden werden. Wie sagen ich beim ausführen, wo er nach den qt libs suchen muss oder muss ich das beim kompilieren schon festlegen? Danke
Martin J. schrieb: > Wie sagen ich beim ausführen, wo er nach den qt libs suchen muss Mit der Umgebungsvariable LD_LIBRARY_PATH. Martin J. schrieb: > Die benötigten Bibliotheken für Qt habe ich schon mit "ldd ./app" aus > findig gemacht und zusammen kopiert. Sicher dass das alle sind? Dynamisch (dlopen) geladene Bibliotheken werden so nicht gefunden. Und hast du auch alle Datendateien (grafiken, übersetzungen, ...) kopiert? Wäre es nicht einfacher gleich das ganze Qt-Paket reinzukopieren?
Fred schrieb: > Jetzt hör endlich mit deinen Ammenmärchen auf! DIe Distributionen achten > da sehr genau drauf. Da passiert ganz selten mal was. Dann muss das bei mir wohl einfach Pech sein. Ich kann meine eigenen Programme von 2007 nicht mehr starten weil die Herren Bibliotheksentwickler die Funktionen umbenannt haben. Fur ein Spiel brauchte ich mal eine alte libjpeg Version. Mathematica brauchte, wimre, ein paar alte GUI-Libraries, etc...
Martin J. schrieb: > Was muss ich jetzt noch beachten, bzw. alles machen damit das gelingt > und mein Programm auch auf einem anderem Rechner läuft. Für den Endanwender am einfachsten: Pack das Programm in das für die Ziel-Linux-Distribution vorgesehene Format. => Du musst dich um nichts kümmern, fehlende Libraries werden automatisch nachinstalliert, und eine große Entwicklergemeine kümmert sich darum, das alles kompatibel bleibt. Probleme wie "Dr. Sommer" sie hatte, treten nicht auf. Das passiert nur, wenn man selber kompiliert oder nicht zur Distribution passende Fremd-Software installiert. Klar: Wenn der Paketmanager nicht weiß, was installiert ist, kann er sich auch nicht um den Erhalt der kompatiblen Bibliotheksfunktionen/versionen kümmern. Für dich als Entwickler am einfachsten: Link Statisch, wenn's erlaubt ist (GPL usw), Ansonsten: Leg alles in ein Verzeichnis und kompilier mit passendem run-path, pack alles in ein großes Tar-Gz.
Dr. Sommer schrieb: > Dann muss das bei mir wohl einfach Pech sein. Ich kann meine eigenen > Programme von 2007 nicht mehr starten weil die Herren > Bibliotheksentwickler die Funktionen umbenannt haben. Natürlich machen die das bei ABI-Änderungen! Du mußt halt die alte Bibliotheksversion über den Paketmanager installieren. Die wird bestimmt parallel zur neuesten angeboten.
Fred schrieb: > Natürlich machen die das bei ABI-Änderungen! Natürlich, und die gibts ständig > Du mußt halt die alte > Bibliotheksversion über den Paketmanager installieren. Die wird bestimmt > parallel zur neuesten angeboten. Ja - aber da ist das ABI auch schon geändert. Unter Ubuntu zB gibts kein Package mit dem gewünschten ABI. Εrnst B✶ schrieb: > Probleme wie "Dr. Sommer" sie > hatte, treten nicht auf. Und wie funktioniert das? Nur weil mein Programm in einem .deb Archiv ist ist das ABI von der Library plötzlich kompatibel? Εrnst B✶ schrieb: > und eine große Entwicklergemeine kümmert > sich darum, das alles kompatibel bleibt. Ja, indem sie auf irgendwelchen obskuren Seiten Binaries der alten Library-Versionen anbieten - super praktisch. Εrnst B✶ schrieb: > oder nicht zur Distribution passende Fremd-Software installiert Und GENAU SO EINE will der TO ja erstellen! Wäre die Software opensource und gäbe es einen Package Maintainer der regelmäßig neue Binaries kompiliert und publiziert, ja, dann funktioniert das. Εrnst B✶ schrieb: > Für dich als Entwickler am einfachsten: Link Statisch, wenn's erlaubt > ist (GPL usw) Und technisch möglich, siehe Daten-Dateien und mit dlopen geladene Binaries. > Ansonsten: Leg alles in ein Verzeichnis und kompilier mit > passendem run-path, pack alles in ein großes Tar-Gz. Also genau das was ich die ganze Zeit schon sage. Sowas.
Dr. Sommer schrieb: > Ja - aber da ist das ABI auch schon geändert. Unter Ubuntu zB gibts kein > Package mit dem gewünschten ABI. Pech. Dann nimm das ältere Ubuntu. Meine Güte, so ein Problem hat man halt, wenn man zehn Jahre seine Software nicht anfaßt.
Fred schrieb: > Pech. Dann nimm das ältere Ubuntu. Und genau das meine ich. Da hat der normale User keine Lust drauf. Da nimmt er lieber die Konkurrenz-Software, oder gleich Windows. > Meine Güte, so ein Problem hat man halt, wenn man zehn Jahre seine > Software nicht anfaßt. Wären alle Libraries mit dabei gepackt - wie das bei Windows-Programmen üblich ist - hätte man diese Probleme nicht.
oh je das ich hier solch eine Diskussion los trete habe ich nicht gedacht. Ich hätte aber auch nicht gedacht, das es solch ein Aufwand ist. Auf Grund der vielen Nachfrage, wollt ich es den Usern meines Programms ermöglichen dieses auch auf Linux zu betreiben. Hab es also auf Ubuntu erstellt und es an bestimmten Stellen auf Linux angepasst. Ich habe nicht erwartet, das bei Linux das verteilen von Software schwieriger ist als das erstellen. Und ja ich möchte den Quellcode nicht veröffentlichen, auch wenn das Programm für manchen Programmierer trivial ist. Außerdem möchten vielen Nutzer das Programm einfach nur entpacken und danach sofort verwenden können, ohne groß Erfahrung mit Linux zu haben. Viele haben einfach nur einen zweit PC mit Ubuntu und darauf läuft es. Wer kann mir jetzt eine Anleitung geben wie ich mein Programm, erstellt mit Qt4.8.5 relativ einfach und ohne großen Aufwand packen kann, so dass es auch auf anderen Systemen läuft.
Willkommen in der Paketierungs-Hölle. Aber ist ja kein Ding. Deine Software muss nur so berühmt wie firefox werden und schon paketieren alle Maintainer diverser Distris für dich :-)
das kann man so sagen. ... auch wenn man Tante google ausführlich befragt, habe ich noch keine Anleitung gefunden die am Ende auch funktioniert, dabei nutzen doch so viele Qt :-(
Fatal schrieb: > Aber ist ja kein Ding. Deine Software muss nur so berühmt wie firefox > werden und schon paketieren alle Maintainer diverser Distris für dich Nö, nicht ganz. Normalerweise helfen einem die "Package Maintainers" sehr gut. Bei Debian z.B. kann man das recht schnell an so einen abgeben (zumindest gings mir mit lcd4linux so) ABER: mit Closed Source wirst du da das Nachsehen haben. Was ich auch voll verstehe. Die machen das ja auch großteils freiwillig und in ihrer Freizeit. Warum willst du den Source nicht veröffentlichen? Hängt ein geschäftsmodell dran?
:
Bearbeitet durch User
Michael Reinelt schrieb: > Warum willst du den Source nicht veröffentlichen? Hängt ein > geschäftsmodell dran? Da einige Teile des Quellcodes schon bei kommerziellen Projekten verwendet wurden und ich diese daher nicht veröffentlichen kann.
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.