Pour cette question, je vais utiliser un exemple spécifique, mais cela se généralise à peu près à tout binaire sous Linux qui ne semble pas trouver ses bibliothèques dépendantes. Donc, j'ai un programme qui ne fonctionnera pas à cause des bibliothèques manquantes:
./cart5: error while loading shared libraries: libcorona-1.0.2.so: cannot open shared object file: No such file or directory
ldd fait la lumière sur la question:
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)
Cependant, corona est installé:
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
Comment dire au binaire où chercher la bibliothèque "manquante"?
Si vous souhaitez éviter LD_LIBRARY_PATH, vous pouvez également le faire, lors de la liaison:
-Wl, ... est utilisé pour passer des commandes supplémentaires à l'éditeur de liens, et dans ce cas, avec -R, vous dites à l'éditeur de liens de stocker ce chemin comme "chemin de recherche par défaut" pour le .so.
Je note de nombreux petits conseils comme celui-ci sur mon site:
https://www.thanassis.space/tricks.html
la source
/opt/mypackage/bin/someBinary
aurez besoin de bibliothèques dans lesquelles vous stockez/opt/mypackage/lib/
. Presque tous les logiciels propriétaires installés sous / opt suivent cette règle - ce qui signifie que la manière indiquée ci-dessus couvrira toutes ces installations. Ils ajouteront ensuite généralement un lien symbolique sous / usr / bin qui pointe vers le binaire sous / opt - sachant que le "chemin de recherche par défaut" trouvera les.so
s sous le/opt/.../lib
dossier approprié .Cela indique que libcorona n'est pas installé dans le bon chemin. Déplacez le répertoire libcorona dans le bon chemin, le problème sera résolu.
la source