Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Не могу запустить 32-битный двоичный файл на 64-битном Debian

Автор вопроса: G3yostОтветов: 1

Я компилирую C++ в Debian Linux (64-разрядная версия), и мне нужно иметь возможность компилировать в 32-разрядную версию для другой системы. Двоичные файлы не будут работать в моей 64-битной системе, и их запуск там будет гораздо удобнее для тестирования.

Мой C++ для тестирования это int main () { std::cout << "This is Main.cpp" << std::endl; } с включенным iostream, так что ничего особенного.

Моя строка компиляции g++ -m32 Main.cpp

Когда я делаю ./a.out, я получаю -bash: ./a.out: cannot execute binary file: Exec format error

Я провел немало поисков, пытаясь решить эту проблему, и установил apt: libc6:i386, libncurses5:i386 и libstdc++6:i386.

Любые другие идеи, чтобы исправить это, будут высоко оценены.

  • Что вам говорит file ./a.out? Вы можете запускать 64-битные двоичные файлы (компилировать без -m32)? Hadi Brais 08.04.2018
  • @HadiBrais Я могу запускать 64-битные двоичные файлы без -m32, и когда я компилирую с -m32, чтобы получить 32-битный a.out, и я делаю file a.out, я получаю a.out: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e1483a60a1b26d9b3738bb963e90e713b515031b, not stripped G3yost 08.04.2018
  • Следует сказать ELF 32-bit LSB executable..., а не ELF 32-bit LSB shared object... Почему компилятор выдает общий объект? Он должен выдать исполняемый файл. Общий объект нельзя запустить с помощью ./a.out. Hadi Brais 08.04.2018
  • @HadiBrais, да ... я посмотрю на это. Не знаю, почему мне не пришло в голову сравнить file с -m32 и -m64, которые раньше считались исполняемыми файлами. Мне не терпится нырнуть в эту кроличью нору. Спасибо! G3yost 08.04.2018
  • Рад, что смог помочь. Пожалуйста, держите меня в курсе проблемы. Hadi Brais 08.04.2018

c++linux32-bit64-bit32bit-64bit

Ответы

Ответ 1 · рейтинг 13 · Xypron

Вам необходимо установить 32-битные библиотеки, например.

dpkg --add-architecture i386
apt-get update
apt-get install libc6-i386

Узнать, какие библиотеки нужны, можно с помощью команды ldd. Вы можете использовать apt-file, чтобы найти пакеты для библиотек.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы