Forum: PC-Programmierung Linux: Lokale Bibliotheken


von Thorsten E. (nietzsche)


Lesenswert?

Moin,

mal ne Linux-Spezifische frage... Ich möchte unter Linux etwas selbst 
kompilieren (configure, make, make install), will/muss aber einige 
Bibliotheken nur lokal installieren. Sprich ich habe spezielle 
Bibliotheken in meinem home Verzeichniss installiert. Wie teile ich dies 
dem configure-Script mit?

Ich habe irgendwie den LD_LIBRARY_PATH im Kopf... Wie müsste ich den 
setzen?
Mal angenommen ich habe meine Bibliothek in 
/home/user/localbib/lib/meinelib und die zugehörigen header in 
/home/user/localbib/include/meinelib... Was muss ich dann tun, damit 
configure, make, make install funktioniert?

Ich hoffe ich habe mich verständlich ausgedrückt...

von Daniel -. (root)


Lesenswert?

LD_LIBRARY_PATH betrifft nur den Laufzeitlinker, um ihm mitzuteilen
wo er die shared libs suchen soll.

Wenn du ./configure ausführst und den output (etwas weiter unten)
durchliest, findest du vielleicht Optionen die zu bestimmten
Libraries verweisen können, wenn diese woanders liegen.
Könnte zB so aussehen --with-qt=...

Dann rufst du es so auf
./configure --with-qt=/myqtplace

Manchmal klappt es, manchmal aber auch nicht. Je nachdem wie
plattformfest die make-Skripte geschrieben sind, ob alle
binutils sauber arbeiten, etc. Mit der Zeit wächst mehr und mehr
Erfahrung. Viel Erfolg!

von Mar V. (marvol)


Lesenswert?

Also wie dies mit dem configure-Script aussieht, weiß ich nicht, ich 
arbeite nur mit Makefile. Bei den Makefiles ist die Option '-ldl' 
wichtig.

http://tldp.org/HOWTO/Program-Library-HOWTO/more-examples.html

...siehe Beispiel unten.

Gruß
Marvol

von Daniel -. (root)


Lesenswert?

>Also wie dies mit dem configure-Script aussieht, weiß ich nicht, ich
>arbeite nur mit Makefile. Bei den Makefiles ist die Option '-ldl'
>wichtig.

Wenn man nur eine Plattform untersützen möchte (die eigene zB ;)
dann kann man direkt Makefiles schreiben. configure erstellt hingegen
Makefiles on-the-fly nachdem es deine Plattform inspiziert hat.
Rein empirisch klappt das bei mir in 50% der Fälle.

-ldl wird wohl für "libary dynamic linker" stehen.

Wie gesagt, korrigiert mich wenn ich was falsches sage,
braucht man nicht LD_LIBRARY_PATH zu benutzen. Man kann
auch andere libs static in sein executable mitaufnehmen.
Davon sollte man aber nur in security und recovery Programmen
Gebrauch machen, die möglichst keine Abhängigkeiten haben sollen.

von Daniel -. (root)


Lesenswert?

noch eine Methode wäre, entweder über
export CFLAGS="-I /headerpath -L /libpath"
oder über
./configure CFLAGS="-I /headerpath -L /libpath"
die Umgebung anzupassen. Manchmal arbeitet configure
diese Parameter mit ein. Sie werden dann weiter an den Compiler
gegeben.
Auch das funktiniert in 50% der Fälle. Wenn ich make besser können
würde, sollte die Erfolgsquote deutlich besser sein.

von Thorsten E. (nietzsche)


Lesenswert?

Ich habe die Umgebungsvariable CFLAGS angepasst... Das hat bisher 
Funktioniert... Danke für die Antworten, werde auf jeden Fall alles im 
Hinterkopf behalten für die nächsten Probleme ;)

von faustian (Gast)


Lesenswert?

Eventuell musst Du dann auch deine ld.so.conf anpassen ODER 
LD_LIBRARY_PATH immer zur Ausfuehrungszeit gesetzt haben ODER beim 
Kompilieren -Wl,--rpath= benutzen....

von Thorsten E. (nietzsche)


Lesenswert?

ja, ich habe noch LD_LIBRARY_PATH angepasst...

Allmählich steige ich durch... Mal sehen ob er nun auch ordentlich baut 
:)

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.