Frage

Ist es möglich, gemeinsam genutzten Objektdateien in einem tragbaren Weise wie DLLs in Windows ??

zu verwenden,

Ich frage mich, ob es eine Möglichkeit, die ich eine kompilierte Bibliothek zur Verfügung stellen könnte, gebrauchsfertig, für Linux. Als die gleiche Art und Weise können Sie eine DLL in Windows kompilieren und es kann auf einem beliebigen anderen Windows verwendet werden (ok, keine anderen, sondern auf die meisten von ihnen das möglich ist).

Ist das möglich in Linux?

EDIT:
Ich habe gerade aufgewacht und lesen Sie die Antworten. Es gibt einige sehr gute.
Ich versuche nicht, den Quellcode zu verstecken. Ich will nur eine bereits kompilierte-and-ready-to-use-Bibliothek zur Verfügung zu stellen, so dass die Benutzer ohne Erfahrung auf Kompilation nicht brauchen, es selbst zu tun.
Daher ist die Idee, eine .so-Datei zu schaffen, die so viele verschiedene Linux-Versionen wie möglich bearbeitet.
Die Bibliothek ist in C ++ geschrieben, STL und Boost-Bibliotheken.

War es hilfreich?

Lösung

I hoch sehr empfehlen die LSB app / Bibliothek Checker verwenden. Sein Gehen Sie schnell, wenn Sie sagen:

  • Sind Erweiterungen, die auf einigen Distributionen nicht verfügbar sind
  • Führen bash-isms in Ihrem Installations-Skripte
  • Verwenden Sie syscalls, die nicht in allen neueren Kernel sind
  • Abhängig von Nicht-Standard-Bibliotheken (es wird Ihnen sagen, was distros ihnen fehlt)
  • Und viele, auf viele andere sehr gute Kontrollen

können Sie erhalten mehr Informationen hier sowie das Tool herunterladen. Es ist einfach zu laufen .. nur entpacken Sie es, einen Perl-Skript ausführen und Ihren Browser auf localhost Punkt .. der Rest ist Browser angetrieben wird.

das Werkzeug verwenden, können Sie einfach Ihre Bibliothek / app LSB zertifiziert (für beide Versionen) und machen die Arbeit des Distro Verpacker viel einfacher.

Darüber hinaus verwenden Sie nur so etwas wie libtool (oder ähnlich) um sicherzustellen, dass Ihre Bibliothek richtig installiert ist, bieten ein statisches Objekt für Menschen, die nicht wollen, gegen die DSO verbinden (es wird Zeit für Ihre Bibliothek nehmen erscheinen in den meisten Distributionen, so ein tragbares Programm zu schreiben, kann ich zähle nicht darauf vorhanden) sein und kommentiert Ihre öffentliche Schnittstelle gut.

Für Bibliotheken, finde ich, dass Doxygen die am besten funktioniert. Dokumentation sehr wichtig ist, ist es sicherlich beeinflusst meine Wahl der Bibliothek für jede Aufgabe zu verwenden.

Wirklich, überprüfen Sie die App-Checker aus, sein Gehen Sie Portabilität Problemberichte zu geben, die ein Jahr mit der Bibliothek in der Wildnis nehmen würde sonst zu erhalten.

Schließlich versuchen die Bibliothek einfach fallen zu lassen ‚im Baum‘ zu machen, so habe ich nicht statisch gegen sie zu verknüpfen. Wie gesagt, es könnte ein paar Jahre dauern, bis es in den meisten Distributionen üblich wird. Es ist viel einfacher für mich nur den Code zu packen, legen Sie es in src / lib und verwenden Sie es, bis und wenn Sie Ihre Bibliothek gemeinsam ist. Und bitte, bitte .. gib mir Unit-Tests, TAP (Test etwas Protokoll) ist eine gute und tragbare Art und Weise, das zu tun. Wenn ich Ihre Bibliothek hacken, ich brauche (schnell) wissen, ob ich es brach, vor allem wenn es in Baum ändern oder en situ (wenn das DSO vorhanden ist).

Andere Tipps

Wenn Sie möchten, dass Ihre Benutzer helfen, indem sie kompilierten Code geben, der beste Weg, ich weiß, ist sie eine statisch gelinkte binäre + Dokumentation zu geben, wie sie die binäre laufen kann. (Dies ist möglicherweise zusätzlich zu geben, den Quellcode zu ihnen.) Die meisten statisch gelinkte Binärdateien arbeiten auf den meisten Linux-Distributionen von der gleichen Architektur (+ 32-bit (x86) statisch gelinkte Binärdateien arbeiten auf 64-Bit (AMD64)). Es ist kein Wunder, Skype bietet eine statisch gelinkte Linux herunterladen.

Zurück zu Ihrer Bibliothek Frage. Auch wenn Sie in schriftlicher Form gemeinsam genutzten Bibliotheken unter Linux in einem Experten sind, und nehmen Sie sich Zeit um die Abhängigkeiten zu minimieren, um Ihre gemeinsame Bibliothek auf verschiedene Linux-Distributionen funktionieren würde, auch alte und neue Versionen, gibt es keinen Weg, um sicherzustellen, dass es funktioniert in der Zukunft (etwa 2 Jahre). Sie werden höchstwahrscheinlich die .so-Datei am Ende beibehalten, das heißt macht kleine Änderungen immer und immer wieder, so dass die .so-Datei mit neueren Versionen von Linux-Distributionen kompatibel wird. Das ist kein Spaß für eine lange Zeit zu tun, und es verringert sich die Produktivität im Wesentlichen: die Zeit, die Sie auf die Aufrechterhaltung der Bibliothek Kompatibilität verbringen würde viel besser auf zum Beispiel ausgegeben worden die Funktionalität, Effizienz, Sicherheit usw. der Software zu verbessern.

Bitte beachten Sie auch, dass es sehr einfach ist, die Benutzer zu stören, indem eine Bibliothek in .so Form bereitstellt, die nicht auf ihrem System nicht funktioniert. (Und Sie nicht die Supermacht haben, um es auf zu machen arbeiten alle Linux-Systemen, so dass diese Situation ist unvermeidlich.) Haben Sie bieten 32-Bit und 64-Bit als auch, wie x86, PowerPC, ARM usw.? Wenn die .so-Datei nur auf Debian, Ubuntu und Red Hat arbeitet (weil Sie keine Zeit Zeit zu portieren, die Datei zu mehr Distributionen haben), werden Sie am meisten aufregen wahrscheinlich SUSE und Gentoo Benutzer (und mehr).

Im Idealfall werden Sie wollen GNU verwenden autoconf , auto und libtool configure erstellen und Skripte machen, dann die Bibliothek als Quelle verteilt mit dem erzeugten configure und Makefile.in Dateien.

Hier ist ein Online-Buch über sie.

./configure; make; make install ist ziemlich Standard in Linux.

Die Wurzel des Problems ist, dass Linux auf vielen verschiedenen Prozessoren läuft. Sie können nicht nur auf den Prozessor verlassen x86-Befehle wie Windows funktioniert unterstützt. (Für die meisten Versionen: Itanium (XP und neuer) und Alpha (NT 4.0) sind die Ausnahmen)

Also, die Frage ist, wie gemeinsam genutzte Bibliotheken für Linux zu entwickeln? Sie können einen Blick auf diesem Tutorial nehmen oder die Pogram Bibliothek Howto .

Ich weiß, was Sie fordern. Für Windows MSFT hat den DLLs alle kompatibel sorgfältig gemacht, so dass Ihre DLLs sind in der Regel kompatibel für fast jede Version von Windows, das ist, warum Sie es nennen „portable“.

Leider auf Linux gibt es zu viele Variationen (und jeder denkt „anders“ zu sein, Geld zu verdienen), so dass Sie nicht dieselben Vorteile wie Windows-bekommen können, und deshalb haben wir eine Menge gleichen Pakete zusammengestellt für verschiedene Distributionen haben, Distro Version, CPU-Typ, ...

Einige sagen, das Problem durch (CPU) Architektur verursacht wird, ist es aber nicht. Auch auf demselben Bogen, gibt es immer noch Unterschiede zwischen Distributionen. Wenn Sie wirklich haben versucht, ein Binärpaket zu lösen, würden Sie wissen, wie viel schwer ist es - auch C-Laufzeitbibliothek Abhängigkeit ist schwer aufrecht zu erhalten. Linux OS fehlt zu viel Zeug so fast alle Dienste Abhängigkeitsproblem handelt.

Normalerweise kann man nur einige binäre bauen, die bis zu einem gewissen Verteilung kompatibel ist (oder mehrere Distributionen wenn Sie Glück haben). Deshalb Freigabe Linux-Programme in binärer immer vermasselt, es sei denn, gebunden an einigen Distributionen wie Ubuntu, Debian, oder RH.

setzen Sie einfach eine .so-Datei in / usr / lib können Arbeit, aber Sie vermasseln wahrscheinlich das Schema, das Ihre Distribution für die Verwaltung von Bibliotheken hat.

Werfen Sie einen Blick auf die Linux Standard Base. - Das ist die nächste Sache, die Sie zu einer gemeinsamen Plattform unter Linux-Distributionen finden

http://www.linuxfoundation.org/collaborate/workgroups/lsb

Was sind Sie zu erreichen versuchen?

Tinkertim Antwort ist vor Ort auf. Ich will hinzufügen, dass es wichtig ist, zu verstehen und zu planen Änderungen an gcc ABI . Die Dinge haben sich in letzter Zeit ziemlich stabil gewesen, und ich denke, alle großen Distributionen auf gcc sind 4.3.2 oder so. alle paar Jahre jedoch einige Änderung des ABI (insbesondere die C ++ bezogenen Bits) scheint zu verursachen Chaos, Cross-Distro-Binärdateien lösen solche, die mindestens für den Wunsch und für Benutzer, die Abholung von Paketen von anderen Distributionen verwendet bekommen haben, als sie tatsächlich laufen und finden sie arbeiten. Während einer dieser Übergänge vor sich geht (alle Distros in ihrem eigenen Tempo Upgrade) möchten Sie idealerweise Libs lösen mit ABIs das gesamte Spektrum der gcc-Versionen in Verwendung durch die Benutzer zu unterstützen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top