Hallo, ich kann erfolgreich eine Bibliothek mit meinem Crosscompiler compilieren (.a Datei), und diese ebenfalls auf dem Crosscompiler statisch in ein Projekt zu linken. Wie kann ich die Blibliothek auf dem Zielsystem "installieren", so dass ich die Bibliothek dynamisch linken kann? Gruß Stefan
Das hängt ganz stark vom Zielsystem ab, meinst Du nicht auch? a) Es muss über ein Dateisystem (oder ein Äquivalent davon) verfügen b) Es muss über einen Programmlader verfügen, der dynamische Bibliotheken verwenden kann
Ok, war offenbar zu allgemein formuliert; Dateisystem und entsprechender Programmlader sind vorhanden. Mit ldd <meinprogramm> kann ich auch die benötigten Bibliothek sehen (über die .so Dateien). Aber wie kann ich meine Blibliothek im Zielsystem "registrieren" dass Sie der Programmlader findet?
Stefan schrieb: > Aber wie kann ich > meine Blibliothek im Zielsystem "registrieren" dass Sie der > Programmlader findet? Ich rate mal, es geht hier um linux. Es reicht, die shared library in den Suchpfad des dynamischen linkers zu werfen. Mehr in ld.so(8)
Zunächst muß statt der .a (static lib) mal eine .so (shared) her. Irgendwo in deiner Kommandozeile sollte dazu (mindestens) "-shared" auftauchen. Das Ergebnis kommt muß dann irgendwie auf dein Zielsystem. Ist ja anscheinend Linux, dann kannst Du das per NFS machen (dann mußt Du die lib beim Entwickeln/Testen nicht jedesmal rüber kopieren). Auf dem Zielsystem muß der Lader nur noch wissen, wo die shared lib liegt. Wenn sie in den Standardpfaden nicht zu finden ist, muß man ihm das per LD_LIBRARY_PATH eben klarmachen. "Registriert" muß da nix werden.
>mit einer Konfigurationsanweisung
Ok, Danke, ich spiele das Spiel mal mit:
Wie muss denn die Konfigurationsanweisung denn in etwa aussehen?
Angenommen ich habe im Dateisystem meinelib.a liegen.
Ja, der Crosscompiler hat beim Compilieren der Bibliothek folgende Dateien erzeugt: meinelib.so.3 meinelib.so meinelib.la meinelib.so.3.2.10 meinelib.a Wie das genau funktinoiert habe ich noch nicht genau verstanden, aber eine oder mehrere von den so Dateien werdens wohl dann sein. Findet der Loader die dynamischen Blibliotheken automatisch wenn diese sich im Verzeichnis des Hauptprogrammes befinden?
Na, dann hast Du ja schon die halbe Miete. Alles, was ein .so im Namen hat, muß auf's Target. Der Lader lädt "von alleine" nur von den ("vertrauenswürdigen") Verzeichnissen, die in /etc/ld.so.conf aufgeführt sind (üblicherweise /lib, /usr/lib und /usr/local/lib). Und das nur, wenn der Shared Library Cache aktuell ist (ldconfig -a). Von woanders holt er Shared Libraries nur, wenn man ihn das (über die Umgebungsvariable LD_LIBRARY_PATH) anweist.
Hat geklappt, vielen Dank! Einfach die so Dateien (in meinem Fall waren es 3) nach /usr/lib kopiert, ldd kann's laden, wunderbar, Danke!
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.