Нет такого файла или каталога, когда файл существует

3774
Benedict Lewis

У меня есть файл с именем bitcoindв / usr / bin / bitcoind:

bitcoin@Titan:~$ ll /usr/bin | grep bitcoind -rwxr-xr-x 1 bitcoin bitcoin 7789600 Nov 25 10:39 bitcoind* 

Однако я не могу выполнить это:

bitcoin@Titan:~$ bitcoind -bash: /usr/bin/bitcoind: No such file or directory 

sudo не помогает

bitcoin@Titan:~$ sudo bitcoind sudo: unable to execute /usr/bin/bitcoind: No such file or directory 

Нашел предположение, что это потому, что в нем отсутствуют некоторые обязательные библиотеки, поэтому попытался использовать 'ldd', чтобы найти их:

bitcoin@Titan:~$ ldd /usr/bin/bitcoin ldd: /usr/bin/bitcoin: No such file or directory 
1
Вы уверены, что имя файла не содержит скрытых символов? Проверьте с помощью `ls / usr / bin | grep bitcoind | xxd`. choroba 9 лет назад 0
0000000: 6269 7463 6f69 6e64 0 биткойн Benedict Lewis 9 лет назад 0
Вызов `ldd` пропускает` d` в конце. choroba 9 лет назад 1
Можете ли вы предоставить выходные данные `file / usr / bin / bitcoind` и` uname -a`? chaos 9 лет назад 1
@choroba Исправленный вызов `ldd` возвращает` не динамический исполняемый файл`. Benedict Lewis 9 лет назад 0
@chaos `file` возвращает` / usr / bin / bitcoind: совместно используемый 32-разрядный LSB-объект ELF, Intel 80386, версия 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU / Linux 2.6.24, BuildID [sha1 ] = 41aded5bd1f93bef6c7972e3b0aa7f4c38098336, раздетый`. `uname` возвращает` Linux Titan 3.13.0-37-generic # 64-Ubuntu SMP Mon 22.09 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux`. Benedict Lewis 9 лет назад 0

1 ответ на вопрос

1
chaos

Вы пытаетесь запустить 32-битный исполняемый файл в 64-битной системе. Это не проблема, но вам нужно несколько пакетов в вашей системе, чтобы сделать это.

Добавьте 32-битную архитектуру в библиотеку пакетов:

sudo dpkg --add-architecture i386 

Обновите кеш пакета:

sudo apt-get update 

И установите необходимые пакеты:

sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 

После этого вы сможете выполнить 32-битный исполняемый файл.

Немного предыстории:

lddвозвращается, not a dynamic executableпотому что это не 64-битный исполняемый файл, следовательно, не 64-битный динамический исполняемый файл. Для выполнения 64-битного объекта shaed, такого как ваш исполняемый файл, должен быть динамический компоновщик: загрузчик linux . Обычно это проживает в /lib. В 64-битных системах Linux с 32-битным компоновщиком есть два компоновщика / загрузчика: 32-битный загрузчик /lib32/ld-linux.soи 64-битный загрузчик /lib64/ld-linux.so. 32-битному исполняемому файлу нужны 32-битные библиотеки, поэтому вашему исполняемому файлу могут понадобиться еще несколько библиотек. Установите их в системах на основе Debian с apt-get install libxyz:i386.