Как запустить файл с расширением (возможно, ELF) на Ubuntu?
Мне был дан “двоичный” файл в linux и отдельный файл для окон для конкретной задачи. Программы являются exe для окон. Линукс-версия файла имеет ту же функцию в Linux, что и окна.
Однако я не смог выполнить это. Я попробовал (на терминале) выполнить его только с именем файла, ./[filename] и даже попробовал chmod +x [filename] , а затем попробовал второй способ.
Для всего… Я получаю результат: “Команда не найдена”. (Файл определенно существует, кстати).
Что я должен делать? Команда file на нем дает:
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e805f746e65c09cc8b0c037d8a8c27ee0a6a051c
Я предполагаю, что это 32-битная компиляция на 64-битной системе. Я перекрестно скомпилировал небольшой файл c в двоичный файл, используя опцию -m32 в gcc. Это также потребовало нескольких дополнительных пакетов. Результат a.out выглядит следующим образом.
% file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=be02470c8337b96e7deaaff323bc53865991c3ab, not stripped
Сравните это с внутренней бинарной системой
% file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0823e17cafbe5b2296346216445566840fdfd88, stripped
Запуск a.out показывает мне это.
% ./a.out zsh: no such file or directory: ./a.out
Конкретное сообщение “Команда не найдена” – это что-то, я думаю, bash печатает. Я сам использую zsh.
Чтобы это сработало, вы можете установить пакеты multilib. Я не сузил его до точного пакета, но установка gcc-multilib на Debian тянет все, что вам нужно. После установки этого, вот что я получаю.
(программа должна оценивать значение PI).
Примечание. Мне действительно нужно было установить gcc-multilib только для компиляции файла. Затем я удалил пакеты, чтобы имитировать 64-битную систему, у которой нет 32-битных библиотек времени выполнения, которые нужны этой вещи.
Как «запустить» приложение в ELF формате в Ubuntu?
Разработчик выложил старую версию своего приложения, скачав этот файл без расширения, я решил узнать, в каком он формате. Просмотрев его я обнаружил, что он в ELF формате. Как запустить, либо установить это приложение в Ubuntu?
Просто напрямую взять и запустить, двойным кликом мыши или введя путь к этому файлу в терминале. Только не забудьте выставить файлу права, разрешающие его запуск
1 ответ 1
ELF (англ. Executable and Linkable Format — формат исполнимых и компонуемых файлов) — формат двоичных файлов, используемый во многих современных UNIX-подобных операционных системах, таких как FreeBSD, Linux, Solaris и др.
и из пьесы «мещанин во дворянстве» мольера:
Журден. Скажите на милость! Сорок с лишком лет говорю прозой — и невдомек!
да, большая часть программ (и библиотек) в ряде операционных систем сохраняются в файлах в формате elf . в этом можно убедиться, например, с помощью программы file (вывод разбит на строки для удобства обозрения):
$ file /bin/ls /bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6461a544c35b9dc1d172d1a1c09043e487326966, for GNU/Linux 3.2.0, stripped
если мы скопируем этот файл в текущий каталог без сохранения битов исполнимости:
то и запустить его просто по имени не сможем:
$ ./ls bash: ./ls: Permission denied $ ls -l ls -rw-r--r-- 1 user user 147176 Jan 16 20:40 ls
надо либо добавить бит исполнимости (хотя бы для вас — владельца файла):
$ chmod u+x ls $ ./ls -l ls -rwxr--r-- 1 user user 147176 Jan 16 20:40 ls
либо напрямую вызвать загрузчик (указан в выводе программы file как interpreter ):
$ chmod -x ls $ /lib64/ld-linux-x86-64.so.2 ./ls -l ls -rw-r--r-- 1 user user 147176 Jan 16 20:40 ls