Wie einstellen wo Linux nach shared Libraries sucht?

B

BetaWolf

Grünschnabel
Ich habe eine library selber kompiliert, weil sie nicht auf dem Packetserver meiner Distri erhältlich ist in der neuen Version. Das make install Script hat sie nach /usr/local installiert.

Beim linken war das kein Problem. Jedoch, wenn ich das Programm starten möchte findet er die Library nicht. Wie kann ich Linux sagen, das er auch in /usr/local/lib mal nachschauen soll?
 
Hi,

interessante Frage, da hatte ich selber noch nie nach geguckt, aber unser Freund Google gibt eigentlich bereitwillig Auskunft. ;)

One complication is that Red Hat-derived systems don't include /usr/local/lib by default in their search for libraries; see the discussion below about /etc/ld.so.conf.
source: http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Dort steht eigentlich alles was du zu dem Thema wissen musst. Ansonsten duerfte 'man ld.so' auch brauchbare Infos liefern.

Code:
export PATH=/usr/local/lib

Wie kommst du denn darauf? Das waere mir aber sehr neu, ich denke da hast du entweder seinen Post nicht richtig gelesen, oder etwas grundlegend durcheinander gebracht.

Edit:
Ich sehe jetzt erst wie du ueberhaupt auf die Frage kommst. Im Normalfall passt den library Pfad der Packagemaintainer deiner Distribution von Hand an. D.h. wenn du selber kompilierst, solltest du einfach im Makefile den Pfad selber anpassen. Es kann natuerlich trotzdem nicht schaden, wenn man weiss wie das mit den libraries gehandhabt wird. ;)

mfg,
bytepool
 
Zuletzt bearbeitet:
gropiuskalle
Code:

export PATH=/usr/local/lib

Wie Kollege Bytepool schon schrieb, bringt das für shared-libraries nix.

@BetaWolf

Code:
echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig

sollte Abhilfe schaffen.
 
Es gibt mindestens zwei Stufen, wie unter Linux nach Bibliotheken gesucht wird. Der ueber /etc/ld.conf ist auf jeden Fall die letzte.
Davor wird die Variable LD_LIBRARY_PATH abgesucht. Vielleicht ist es das, was gropiuskalle meinte.
 
Ich hab' die Frage nur halb gelesen, sorry deswegen. Meine Lösung funktioniert natürlich nur mit binaries.
 
.. oder export "LD_LIBRARY_PATH=/usr/local/lib" und dann Programm starten. Dann braucht man
nix an der Konfiguration zu schrauben.
 
Bevor hier noch die LD_LIBRARY_PATHs zerschossen werden... Wenn man eine vom System verwendete Umgebungsvariable ändert, sollte man immer auch den Default-Wert mit aufnehmen, wenn die Variable schon mit einem Wert belegt ist. Daher zuerst mit

Code:
echo $LD_LIBRARY_PATH

nachsehen, ob diese Umgebungsvariable schon einen Wert hat und wenn ja, dann doch bitte

Code:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

verwenden. Im übrigen wird der LD_LIBRARY_PATH zwar zuerst ausgewertet, aber wenn man die darin angegebenen Pfade eh als feste Werte braucht, sollte man sie in den ld.so-Cache einbringen, indem man sie in die /etc/ld.so.conf einträgt und 'ldconfig' ausführt. Dann erspart man sich das Setzen der Pfade für jeden User einzeln.
 
Ich hau sowas immer in die /etc/ld.so.conf.d/
Einfach eine .conf zum Programmnamen erstellen, bei oracle-xpress z.b. oracle-xe.conf
Code:
/usr/lib/oracle/10.2.0.4/client64/lib
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib

und dann per
Code:
ldconfig -v
Die libs neu einlesen.
 
Danke Leute. Ich habs mit der ld.so.conf Methode gemacht.
 

Ähnliche Themen

g++ Shared Libraries

Syslog-NG auf SLES11.2 compilen

Ubuntu findet Library nicht...

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Windows clients können nicht mehr auf lange laufendes System zugreifen

Zurück
Oben