На этот вопрос уже есть ответ здесь:
Я загрузил и извлек двоичный файл Linux для планировщика PDDL blackbox и пытаюсь запустить файл blackbox
. Я перешел в каталог с файлом и попробовал ./ blackbox
, что дало мне ошибку прав доступа. Ничего страшного, просто запустите chmod 755 blackbox
, чтобы дать ему права на исполнение. Но затем, когда я снова пробую ./ blackbox
, я получаю следующую ошибку:
bash: ./blackbox: No such file or directory
То же самое происходит, когда я передаю аргументы команды. Когда я запускаю ls -l
, я вижу файл blackbox
, и у него есть разрешения -rwxr-xr-x
, поэтому я не уверен, почему он "потеря" файла.
Я использую Ubuntu 14.04 как двойную загрузку с Windows 7, если это важно.
РЕДАКТИРОВАТЬ: Я нашел полезный вопрос по суперпользователю, который частично меня туда привел. Я запустил readelf -l ./blackbox | grep ld-linux
, чтобы найти то, что мне нужно, затем выполнил поиск содержимого пакета, чтобы узнать, что мне нужен пакет libc6-i386
.Теперь я могу сделать следующее:
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)
Складывается blackbox
исполняемый файл был 32-разрядной программой, и я выполняю 64-разрядную ОС. Вот (несколько hacky) шаги, которые я сделал для решения этого вопроса (частично вел хронику в этом вопросе на Суперпользователе):
uname -m
сказанный меня у меня есть 64-разрядная ОС, но file blackbox
сказанный меня, что этот exe был 32-разрядным.ldd blackbox
(странно) сказанный меня, что файл не был динамическим исполняемым файлом, даже при том, что я также видел это от file
. Попытка readelf -l ./blackbox | grep ld-linux
сказанный меня [Requesting program interpreter: /lib/ld-linux.so.2]
, который был общей библиотекой, которую я не имел в том местоположении.sudo apt-get install libc6-i386
получить тот файл библиотеки (нашел, что с пакетом ищут на packages.ubuntu.com).ldd
дал мне вывод, и я отсутствовал libstdc++.so.6
и libgcc_s.so.1
(см. мое редактирование), таким образом, я должен был получить эти файлы.gcc-snapshot
пакет имел эти два файла, которые я пропускал. Это - вероятно, крупный молоток для моего крошечного гвоздя, и существуют, вероятно, лучшие решения, но sudo apt-get install gcc-snapshot
получил меня файлы, в которых я нуждался.ldd
снова, это решило вопрос с libgcc_s.so.1
, но libstdc++.so.6
все еще не был найден. Я закончил тем, что шел в место где ldd
найденный libgcc_s.so.1
и выполнение sudo ln -s /usr/lib/gcc-snapshot/lib32/libstdc++.so.6 libstdc++.so.6
получить символьную ссылку на недавно установленный файл.