На свежеустановленной системе Debian Stretch столкнулся с проблемой при запуске 32-битного двоичного исполняемого файла в 64-битной системе:
# ./cfgfmt.linux -tptag.dat -sip ata0025459496ab.txt ata0025459496ab -su: ./cfgfmt.linux: Нет такого файла или каталога # file cfgfmt.linux cfgfmt.linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.0.0, stripped
И тут я вспомнил о том, что нужно включить multiarch - мультиархитектурность, которая позволяет запускать исполняемые файлы совместимых архитектур в операционной системе, которая обычно расчитана на поддержку только какой-либо одной конкретной архитектуры. Например, моя операционная система расчитана на архитектуру amd64, однако с поддержкой мультиархитектурности имеется возможность запуска приложений для совместимой с ней архитектуры i386.
Для добавления дополнительной совместимой архитектуры i386 в операционную систему архитектуры amd64 понадобится выполнить следующую команду:
# dpkg --add-architecture i386
Текущую архитектуру можно посмотреть такой командой:
# dpgk --print-architecture
Список совместимых архитектур, поддержка которых включена в системе, можно посмотреть при помощи такой команды:
# dpkg --print-foreign-architectures
Для получения возможности устанавливать пакеты архитектуры i386 из репозиториев понадобится настроить менеджер пакетов APT. Для этого зададим основную архитектуру и список всех используемых архитектур, создав файл /etc/apt/apt.conf.d/arch со следующим содержимым:
APT::Architecture "amd64"; APT::Architectures "amd64,i386";
Обновим список доступных к установке пакетов из репозиториев:
# apt-get update
Для запуска двоичных файлов, скомпилированных для архитектуры i386, нужно как минимум установить стандартную библиотеку поддержки языка Си:
# apt-get install libc6-i386
Пробуем выполнить первоначальную команду ещё раз:
# ./cfgfmt.linux -tptag.dat -sip ata0025459496ab.txt ata0025459496ab
На этот раз ошибок нет.