lm
флаг в Вашем /proc/cpuinfo
указывает, что Ваш сервер имеет ЦП на 64 бита.
Информация от file prog
указывает, что программа компилируется для архитектуры на 32 бита. Попытайтесь установить эти 32 библиотеки. Я не знаком с тем, как сделать это в хинду, но возможно эта хинду статья Wiki может помочь.
У меня была подобная проблема (удар, сообщая о файле, не находимом) при попытке выполнить Мост Отладки Android на установке на 64 бита Ubuntu, потому что это компилируется для 32 битов.
Попробуйте следующее:
ldd /usr/local/bin/prog
Или выполненный это под strace
:
strace /usr/local/bin/prog
Я предположил бы, что программа связана против общей библиотеки, которая или отсутствует, или скомпилированная для неправильной архитектуры. Учитывая, что это - закрытый исходный код, любой возможен.
Что относительно того, чтобы установить исполнительный флаг в файловой системе монтируются?
mount -o remount,exec server:/path /mntpoint
Если исполнительный флаг не установлен для файловой системы, никакой исполняемый файл не может быть выполнен от той файловой системы.
Можно ли получить результаты для,
which prog
cat /proc/cpuinfo
- я предполагаю, что Вы имеете /proc
Небольшие указатели,
Файл нельзя было бы действительно назвать 'прогр'. Unix позволяет Вам использовать любой символ в имени файла, включая клавишу Backspace, пространство, и т.д. Например, файл можно было назвать 'p^Hprog' и всем, что Вы будете видеть, "прогр". Так как у Вас есть удар, можно использовать в своих интересах автоматическое заполнение:
> ls ./[TAB] # where [TAB] means you hit the tab key
если это соответствует чему-нибудь, Вы могли
> mv ./[TAB]
Если бы Вы - написание кода, Вы хотели бы перечислить все файлы в каталоге и выставочных шестнадцатеричных значениях для каждого символа в имени файла.
$ less prog | head
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
Это подозрительно (если у Вас нет усовершенствованного LESSPIPE)... может Вы делать
ls -l prog
(для размера)
xxd prog | head
(для фактического содержания)
Кроме того, попытайтесь переименовать его к myprog и затем выполнить./myprog
Да я понимаю, что этому вопросу два года. Но вот возможный ответ:
execve () возвращает ENOENT, когда он не может найти интерпретатор ELF. В моем случае мне была нужна символьная ссылка от/lib/ld_lsb.so.3-> ld_linux.so.2. Это - указанное местоположение Основы Стандарта Linux для интерпретатора ELF. Может быть пакет в Вашем распределении, которое предоставляет эту символьную ссылку, вероятно, названную чем-то как 'lsb'.
Я нашел этот лакомый кусочек внутри PDF-файла:
Чтобы установить поддержку 32-разрядной среды выполнения, выполните следующие команды:
Обратите внимание, что это устанавливает более 200 пакетов и занимает несколько минут.
Выполнение этого позволило мне запустить под 64-битным Linux: ldd
для работы, как а также, например, двоичный код NVIDIA nvflash
...
file
вывод команды говорит, что программа динамично связана, ноldd
говорит это isn' t. Если I' m ошибочный,ldd
потребности динамический компоновщик для определения необходимых общих библиотек. На моем хинду Xen VM я имею и/lib32/ld-linux.so.2
и/lib64/ld-linux.so.2
, таким образом, I' d предполагают, что исходный плакат отсутствует/lib32
версия. – James Sneeringer 4 August 2009 в 23:09emerge
набор пакетов, которые могут взять некоторое время, но необходимо закончить с системой, которая может выполнить 32-разрядные двоичные файлы. – James Sneeringer 5 August 2009 в 07:28