Я компилирую 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
)? - person Hadi Brais   schedule 08.04.2018-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
- person G3yost   schedule 08.04.2018ELF 32-bit LSB executable...
, а неELF 32-bit LSB shared object...
Почему компилятор выдает общий объект? Он должен выдать исполняемый файл. Общий объект нельзя запустить с помощью./a.out
. - person Hadi Brais   schedule 08.04.2018file
с-m32
и-m64
, которые раньше считались исполняемыми файлами. Мне не терпится нырнуть в эту кроличью нору. Спасибо! - person G3yost   schedule 08.04.2018