Für diese Frage verwende ich ein spezielles Beispiel, aber dies verallgemeinert so ziemlich jede Binärdatei unter Linux, die ihre abhängigen Bibliotheken nicht zu finden scheint. Ich habe also ein Programm, das wegen fehlender Bibliotheken nicht ausgeführt werden kann:
./cart5: error while loading shared libraries: libcorona-1.0.2.so: cannot open shared object file: No such file or directory
ldd beleuchtet das Problem:
linux-vdso.so.1 => (0x00007fff18b01000)
libcorona-1.0.2.so => not found
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/libstdc++.so.6 (0x00007f0975830000)
libm.so.6 => /lib/libm.so.6 (0x00007f09755af000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f0975399000)
libc.so.6 => /lib/libc.so.6 (0x00007f0975040000)
libz.so.1 => /lib/libz.so.1 (0x00007f0974e2b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0975b36000)
Corona ist jedoch installiert:
oliver@human$ find / -name libcorona-1.0.2.so 2> /dev/null
/usr/local/lib64/libcorona-1.0.2.so
/home/oliver/installed/corona-1.0.2/src/.libs/libcorona-1.0.2.so
Wie sage ich der Binärdatei, wo nach der "fehlenden" Bibliothek zu suchen ist?
Wenn Sie LD_LIBRARY_PATH vermeiden möchten, können Sie dies auch während der Verknüpfung tun:
Mit -Wl, ... werden zusätzliche Befehle an den Linker übergeben. In diesem Fall weisen Sie den Linker mit -R an, diesen Pfad als "Standardsuchpfad" für die .so-Datei zu speichern.
Ich mache mir Notizen zu vielen kleinen Tipps wie diesen auf meiner Website:
https://www.thanassis.space/tricks.html
quelle
/opt/mypackage/bin/someBinary
werden Bibliotheken benötigt, in denen Sie speichern/opt/mypackage/lib/
. Nahezu alle proprietären SWs, die unter / opt installiert werden, folgen dieser Regel - was bedeutet, dass der oben gezeigte Weg alle derartigen Installationen abdeckt. Sie fügen dann normalerweise auch einen Symlink unter / usr / bin hinzu, der auf die Binärdatei unter / opt verweist - in dem Wissen, dass der "Standardsuchpfad" das.so
s unter dem entsprechenden/opt/.../lib
Ordner findet.Dies zeigt an, dass libcorona nicht im richtigen Pfad installiert ist. Verschieben Sie das libcorona-Verzeichnis in den richtigen Pfad. Das Problem wird behoben.
quelle