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.