Ubuntu (xenial) не может выполнить двоичный файл: ошибка формата Exec

Вопрос или проблема

У меня возникла проблема с запуском файла ecl.e, это 32-битная программа.

Я получаю следующее, если запускаю с bash:

bash /home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e
/home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e: /home/user/miniconda2
/envs/iraf27/iraf//bin.linux/ecl.e: невозможно выполнить бинарный файл

и,

./home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e
-bash: ./home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e: Нет такого файла или каталога

Я запускаю программу на x86_64. Поэтому я понимаю, что может быть проблема с отсутствием нужных библиотек. Я пытался это исправить, скачав библиотеки:

apt-get update
sudo apt-get install libc6:i386 libz1:i386 libncurses5:i386 
libbz2-1.0:i386 libuuid1:i386 libxcb1:i386 libxmu6:i386

Однако проблема все еще сохраняется.

Это вывод, если я запускаю команду file на этом файле:

file /home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e: ELF 32-bit LSB executable, 
Intel 80386, version 1 (SYSV), dynamically linked, 
interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.9, not stripped

и ldd:

ldd /home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e
не является динамическим исполняемым файлом

Эта ошибка обычно означает, что ядро не обрабатывает формат исполняемого файла. Это происходит, например, если вы используете подсистему Windows On Linux в Windows 10, которая запускает только 64-битные исполняемые файлы.
Если вы обновите Ubuntu до версии 18.04 или 18.10, вы можете установить 64-битную версию напрямую с помощью sudo apt install iraf.

.

Ответ или решение

Теоретическая часть (T – Theory):

Ошибка "Exec format error" возникает, когда операционная система не может распознать формат исполняемого файла. В вашем случае вывод команды file показывает, что файл /home/user/miniconda2/envs/iraf27/iraf//bin.linux/ecl.e – это ELF 32-битное LSB (Little-Endian) исполняемое изображение, скомпилированное для архитектуры Intel 80386. Поскольку ваша система работает на архитектуре x86_64, для запуска этих 32-битных приложений требуется включение поддержки 32-битного исполнения.

Пример (E – Example):

Вы уже предприняли попытку установить необходимые 32-битные библиотеки с использованием команды sudo apt-get install libc6:i386 libz1:i386 libncurses5:i386 libbz2-1.0:i386 libuuid1:i386 libxcb1:i386 libxmu6:i386. Это правильный шаг, но поскольку ошибка не исчезла, существует вероятность того, что проблема не только в отсутствии библиотек, но и в других факторах, таких как неправильно указанные пути или поврежденные файлы.

Интересно, что команда ldd, которая обычно отображает зависимости динамических библиотек, в этом случае сообщает, что файл "не является динамическим исполняемым файлом". Это может указывать на ошибку в файле или проблему с правами доступа, если, например, файл поврежден или отсутствует.

Применение (A – Application):

  1. Проверка файловой системы и прав доступа:

    • Убедитесь, что файл действительно существует в указанном пути. Попробуйте перейти в директорию /home/user/miniconda2/envs/iraf27/iraf/bin.linux/ и вручную проверить наличие ecl.e.
    • Проверьте права доступа к файлу с помощью команды ls -l /home/user/miniconda2/envs/iraf27/iraf/bin.linux/ecl.e. Убедитесь, что у вас есть права на исполнение (используйте chmod +x для предоставления таких прав, если это необходимо).
  2. Проверка целостности файла:

    • Обычно полезно убедиться, что файл не поврежден. Если у вас есть исходный пакет или архив, из которого был извлечен ecl.e, попробуйте извлечь его заново и заменить текущий файл.
  3. Проверьте настройки архитектуры:

    • Убедитесь, что ваша система поддерживает многоплатформенные бинарные файлы. Проверить это можно командой dpkg --print-architecture для текущей архитектуры и dpkg --print-foreign-architectures – чтобы убедиться, что поддерживается i386 архитектура.
  4. Еще раз установите необходимые библиотеки:

    • Попробуйте выполнить установку библиотек еще раз и уточните, не упустили ли вы какие-либо зависимости. Порой sudo apt-get install libc6:i386 и других библиотек может быть недостаточно, и может потребоваться установка дополнительных пакетов: sudo apt-get install gcc-multilib g++-multilib.
  5. Запуск через эмуляторы или контейнеры:

    • Если несмотря на все вышеописанные действия проблема не исчезает, рассмотрите возможность использования более сложных решений, таких как установка виртуальных машин или использование Docker контейнеров с 32-битными системами, чтобы обеспечить необходимую среду исполнения.

Надеюсь, предлагаемые шаги помогут вам исправить проблему с запуском файла ecl.e. Если после всех действий проблема все еще актуальна, возможно, стоит обратиться к документации или поддержке вендора, откуда был получен исполняемый файл, для уточнения совместимости и дополнительных требований к среде.

Оцените материал
Добавить комментарий

Капча загружается...