Как скомпилировать 32-разрядный двоичный файл на 64-разрядной машине Linux с gcc/cmake

Я предпочитаю, чтобы .hpp для C++ прояснил обоим редакторам и другим программистам, что это - заголовок C++, а не заголовочный файл C.

127
задан Szabolcs Dombi 30 August 2016 в 21:35
поделиться

4 ответа

export CFLAGS=-m32
122
ответ дан 24 November 2019 в 00:46
поделиться

Один из способов - настроить среду chroot. В Debian есть несколько инструментов для этого, например debootstrap

6
ответ дан 24 November 2019 в 00:46
поделиться
$ gcc test.c -o testc
$ file testc
testc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
$ ldd testc 
    linux-vdso.so.1 =>  (0x00007fff227ff000)
    libc.so.6 => /lib64/libc.so.6 (0x000000391f000000)
    /lib64/ld-linux-x86-64.so.2 (0x000000391ec00000)
$ gcc -m32 test.c -o testc
$ file testc
testc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
$ ldd testc
    linux-gate.so.1 =>  (0x009aa000)
    libc.so.6 => /lib/libc.so.6 (0x00780000)
    /lib/ld-linux.so.2 (0x0075b000)

Вкратце: используйте флаг -m32 для компиляции 32-битного двоичного файла.

Также убедитесь, что у вас установлены 32-битные версии всех необходимых библиотек (в моем случае все, что мне нужно в Fedora, было glibc-devel.i386)

75
ответ дан 24 November 2019 в 00:46
поделиться

В более поздних версиях CMake один способ сделать это для каждой цели:

set_target_properties (MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

Я не Я не знаю, как это сделать в глобальном масштабе.

16
ответ дан 24 November 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: