J'ai téléchargé et extrait le fichier binaire Linux pour le planificateur PDDL de boîte noire , et j'essaie d'obtenir le fichier blackbox
à exécuter. J'ai changé le répertoire avec le fichier et essayé ./blackbox
, ce qui m'a donné une erreur de permission. Pas de problème, lancez simplement chmod 755 blackbox
pour lui donner des autorisations exécutables. Mais ensuite, lorsque j'essaie à nouveau ./blackbox
, j'obtiens le message d'erreur suivant:
bash: ./blackbox: No such file or directory
Il en va de même lorsque je donne les arguments de la commande. Quand j’exécute ls -l
, je vois le fichier blackbox
qui contient les autorisations -rwxr-xr-x
. Je ne sais donc pas pourquoi il "perd" le fichier.
J'utilise Ubuntu 14.04 en double amorçage avec Windows 7, si cela compte.
EDIT: J'ai trouvé une question utile sur le superutilisateur, ce qui m'a permis de m'y rendre partiellement. J'ai exécuté readelf -l ./blackbox | grep ld-linux
pour trouver ce dont j'avais besoin, puis une recherche de contenu de package pour découvrir que j'avais besoin du package libc6-i386
. Maintenant je peux faire ce qui suit:
user@ubuntu:~/path$ ./blackbox
./blackbox: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
user@ubuntu:~/path$ ldd blackbox
linux-gate.so.1 => (0xf77af000)
libstdc++.so.6 => not found
libm.so.6 => /lib32/libm.so.6 (0xf774f000)
libgcc_s.so.1 => not found
libc.so.6 => /lib32/libc.so.6 (0xf75a4000)
/lib/ld-linux.so.2 (0xf77b0000)
Il se trouve que l'exécutable blackbox
était un programme 32 bits et j'utilise un système d'exploitation 64 bits. Voici les étapes (quelque peu compliquées) que j'ai prises pour résoudre ce problème (partiellement décrit dans cette question sur Superuser ):
uname -m
m'a dit que j'avais un système d'exploitation 64 bits, mais file blackbox
m'a dit que cet exe était en 32 bits.ldd blackbox
(étrangement) m'a dit que le fichier n'était pas un exécutable dynamique, même si je l'ai également vu dans file
. Essayer readelf -l ./blackbox | grep ld-linux
m'a dit [Requesting program interpreter: /lib/ld-linux.so.2]
, qui était une bibliothèque partagée que je n'avais pas à cet endroit.Sudo apt-get install libc6-i386
pour obtenir ce fichier de bibliothèque (trouvé avec une recherche de paquet sur packages.ubuntu.com ).ldd
me donnait une sortie et il me manquait libstdc++.so.6
et libgcc_s.so.1
(voir ma modification). Il me fallait donc récupérer ces fichiers.gcc-snapshot
contenait les deux fichiers qui me manquaient. C'est probablement un énorme marteau pour mon petit clou, et il existe probablement de meilleures solutions, mais Sudo apt-get install gcc-snapshot
m'a obtenu les fichiers dont j'avais besoin.ldd
, le problème rencontré avec libgcc_s.so.1
a été résolu, mais libstdc++.so.6
n'était toujours pas trouvé. J'ai fini par aller à l'endroit où ldd
a trouvé libgcc_s.so.1
et à exécuter Sudo ln -s /usr/lib/gcc-snapshot/lib32/libstdc++.so.6 libstdc++.so.6
pour obtenir un lien symbolique vers le fichier récemment installé.