[lug-ld] Was macht ldconfig?

Jean-Jacques Sarton jj.sarton at web.de
Mi Nov 5 14:53:24 CET 2014


Hallo,

zusätzlich zur bereits gegebene Informationen wäre noch
die Variable LD_LIBRARY_PATH zu erwähnen.

Wir diese Variable bei den Aufruf eines Programms gesetzt,
werden als ersten die Bibliotheken genommen die in den
Pfaden die in der Variable angegeben sind benutzt.

Beispiel:

LD_LIBRARY_PATH=/home/user/meinProgramDir:/usr/local/lib
/home/user/meinProgramDir/meinProgram

Damit können Bibliothecken die nur für meinProgram gelten
in  separater Verzeichniss gehalten werden.
Google-Chrome und acroread nutzen diese Variable.

Jean-Jacques

Am 05.11.2014 um 14:11 schrieb Christian Boltz:
> Hallo Ekki, hallo zusammen,
> 
> vorweg @Uwe: Die monatlichen Treffen finden im Vier Jahreszeiten in 
> Landau statt - ruf am Besten direkt dort an und frage, ob Hunde erlaubt 
> sind.
> 
> Am Dienstag, 4. November 2014 schrieb Ekki Plicht:
>> Tag.
>> Es ist ja so ruhig hier... Ich hoffe, ich störe nicht :)
> 
> Huch! Eine Mail! *aufschreck*
> 
>> Ich würde gerne mal wissen, was 'ldconfig' genau macht und wann man
>> das anwenden muss.
> 
> Die technischen Details hat Alf schon erklärt, und zur Wahl des 
> Verzeichnisses verweise ich auf die Antwort von Uwe.
> 
> Bleibt noch die Frage zu /etc/ld.so.conf und /etc/ld.so.conf.d/
> 
>> Ich habe daraufhin mal die man-Page von ldconfig angeguckt... Ok, da
>> gibt's ne /etc/ld.so.conf und /etc/ld.so.conf.d/ usw. Da steht aber
>> nur ein Eintrag drin, '/usr/lib/libfakeroot'. Was immer das heissen
>> mag. So richtig verstanden, was da passiret habe ich aber leider
>> nicht.
>>
>> Was müsste ich denn wo drehen, damit a) entweder der Linker neue Libs
>> nicht nach '/usr/local/lib/' sondern nach '/usr/lib/' schmeisst, oder
>> b) dass ein Programm seine Libs auch in '/usr/local/lib/' sucht.
> 
> In /etc/ld.so.conf und /etc/ld.so.conf.d/*.conf stehen Verzeichnisse, 
> die Libraries enthalten. Stell Dir das Ganze als $PATH für Libraries 
> vor ;-)
> 
> Du kannst also einfach folgendes machen:
>     echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
> 
> Anschließend einmal "ldconfig" aufrufen. Das durchsucht alle 
> Verzeichnissen, die in /etc/ld.so.conf{,d/*.conf} gelistet sind. Laut 
> Manpage werden zusätzlich auch /lib und /usr/lib mit aufgenommen, auch 
> wenn sie nicht in den Konfigurationsdateien stehen.
> 
> Die Liste aller gefundenen Libraries wird von ldconfig in 
> /etc/ld.so.cache geschrieben. Aus der Manpage ldconfig(8):
> 
>      /etc/ld.so.cache
>              File containing an ordered list of libraries 
>              found in the directories specified in /etc/ld.so.conf,
>              as well as those found in /lib and /usr/lib.
> 
> Der Umweg über ldconfig bzw. /etc/ld.so.cache ist nötig, damit nicht 
> jedes Programm bei Start alle Verzeichnisse in /etc/ld.so.conf{,d/*} 
> abklappern muss - das würde den Programmstart vermutlich deutlich 
> verlangsamen.
> 
> 
> Gruß
> 
> Christian Boltz
>