75 Stimmen

Wie man nicht standardmäßig freigegebenen Bibliothek Pfad in GCC Linux angeben? Ich erhalte "Fehler beim Laden von Shared Libraries", wenn ich

Es gibt einen Laptop, auf dem ich keine Root-Rechte habe.

auf dem Rechner habe ich eine Bibliothek installiert, die configure --prefix=$HOME/.usr .

Danach habe ich diese Dateien in ~/.usr/lib :

libXX.so.16.0.0
libXX.so.16
libXX.so
libXX.la
libXX.a

wenn ich ein Programm kompiliere, das eine der von der Bibliothek bereitgestellten Funktionen mit diesem Befehl aufruft: gcc XXX.c -o xxx.out -L$HOME/.usr/lib -lXX

xxx.out wurde ohne Warnung generiert, aber wenn ich es ausführe, wird ein Fehler wie dieser ausgegeben:

./xxx.out: error while loading shared libraries: libXX.so.16: cannot open shared object file: No such file or directory Allerdings libXX.so.16 wohnt dort.

Meine ahnungslose Vermutung ist, dass ~/.usr/lib wurde beim Aufruf von xxx.out nicht durchsucht. aber was kann ich tun, um den Pfad von .so anzugeben, damit xxx.out dort nach der .so-Datei suchen kann?

Ein Zusatz ist, wenn ich füttere -static zu gcc, passiert ein weiterer Fehler wie dieser:

undefined reference to `function_proviced_by_the_very_librar'

Es scheint .so spielt keine Rolle, auch wenn -L y -l werden dem gcc übergeben. was sollte ich tun, um eine brauchbare Exe mit dieser Bibliothek zu bauen?


Für andere Leute, die die gleiche Frage wie ich haben

Ich fand ein nützlicher Artikel bei tldp darüber.

Es werden statische/gemeinsame/dynamische geladene Bibliotheken sowie einige Beispielcodes zu deren Verwendung vorgestellt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X