Statisch mit glibc und libstdc ++ verknüpfen
Ich Schreibe ein cross-Plattform-Anwendung, die nicht GNU GPL-kompatibel. Das große problem, ich bin derzeit konfrontiert ist, dass die Anwendung dynamisch gelinkt mit der glibc und libstdc++, und fast jedes neue große update für die Bibliotheken sind nicht abwärtskompatibel. Daher, zufällige Abstürze sind zu sehen in meiner Anwendung.
Als eine Abhilfe, die ich verteilen binaries meine kompilierte Anwendung auf verschiedene Systeme (mit unterschiedlichen C/C++ - runtime-Versionen). Aber verzichten möchte ich auf diese. Meine Frage ist also, halten, Lizenzierung und alles im Auge, kann ich den link gegen die glibc und libstdc++ statisch? Auch, wird dies zu Problemen mit rtld?
InformationsquelleAutor der Frage themoondothshine | 2010-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht.
Kopieren Sie die original-Bibliotheken Sie gelinkt gegen die auf ein Verzeichnis (../lib in diesem Beispiel) in Ihrer Anwendung Ordner.
Wie:
my_app_install_path
Benennen Sie die app für so etwas wie app.bin. Ersetzen Sie Ihre app für ein kleines shell-Skript, das setzt die enviroment-variable LD_LIBRARY_PATH um den library Pfad (und verketten die vorherigen LD_LIBRARY_PATH Inhalt, wenn überhaupt). Jetzt ld sollte in der Lage sein zu finden der dynamischen Bibliotheken Sie gelinkt gegen und Sie brauchen nicht zu kompilieren statisch in die ausführbare Datei.
Beachten Sie bei der LGPL hinzufügen der vorgegebenen Zuordnung zu den Bibliotheken und zeigt in der Dokumentation, wo der Quellcode heruntergeladen werden kann.
InformationsquelleAutor der Antwort Vitor Py
Angabe der option
-static-libgcc
an den linker veranlassen würde, es zu verlinken, die gegen eine statische version der C-Bibliothek, wenn auf dem system verfügbar. Sonst wird Sie ignoriert.InformationsquelleAutor der Antwort themoondothshine
glibc steht unter der LGPL. Abschnitt 6). der LGPL 2.1verbreiten Sie Ihr Programm, verbunden mit der Bibliothek, vorausgesetzt, Sie erfüllen eine der fünf Optionen. Der erste ist der Quellcode der Bibliothek, zusammen mit den Objekt-code (Quelle ist optional, nicht erforderlich) Ihr eigenes Programm, so kann es erneut verknüpft werden mit der Bibliothek. Alternativ können Sie in einem SCHRIFTLICHEN Angebot des gleichen. Ihren eigenen code nicht unter der LGPL-Lizenz, und Sie nicht haben, um release Quelle.
libstdc++ steht unter der GPL, aber mit einem große Ausnahme. Sie können im Grunde nur verteilen, unter der Lizenz Ihrer Wahl ohne Angabe der Quelle, entweder für Ihren eigenen code oder libstdc++. Die einzige Bedingung ist, dass Sie kompilieren normalerweise, ohne z.B. proprietäre Modifikationen oder plugins GCC.
IANAL, und Sie sollten prüfen, Beratung eine, wenn Sie brauchen echte Rechtsberatung.
InformationsquelleAutor der Antwort Matthew Flaschen
Muss ich Frage, was zum Teufel Sie tun, mit den Armen library-Funktionen?
Ich habe einige cross-Plattform-software als auch. Es läuft wunderbar auf Linux-Systemen alle Sorten. Bauen Sie mit der ältesten version der software, die Sie unterstützen möchten. Die glibc und libstdc++ - Bibliotheken sind wirklich sehr abwärtskompatibel.
Ich gebaut habe, auf CentOS 4, und führen Sie auf RHEL 6 beta. Keine Probleme.
Kann ich bauen auf stabilen Debian und führen Sie es auf die Prüfung.
Nun, ich haben manchmal Schwierigkeiten mit den Bibliotheken, wenn ich versuche auf zu bauen, sagen alte Debian und versuchen, führen Sie es auf CentOS 5.4. Das ist in der Regel durch die Konfiguration der Verteilung Entscheidungen, die anders sind, wie die Wahl threading oder nicht-threading.
InformationsquelleAutor der Antwort Zan Lynx