Forum: Compiler & IDEs Crosscompiler: Library auf target installieren


von Stefan (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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?

von hm (Gast)


Lesenswert?

mit einer Konfigurationsanweisung

von Lukas K. (carrotindustries)


Lesenswert?

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)

von Markus F. (mfro)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

>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.

von Stefan (Gast)


Lesenswert?

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?

von Markus F. (mfro)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.