6 ответов:
$ 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)
в более поздних версиях CMake, один из способов сделать это на каждой цели:
set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")Я не знаю способа сделать это глобально.
один из способов-настроить среду chroot. Debian имеет ряд инструментов для этого, например debootstrap
для любого сложного приложения, я предлагаю использовать контейнер lxc. контейнеры lxc - это "что-то среднее между chroot на стероидах и полноценной виртуальной машиной".
например, вот способ построить 32-битное вино с помощью lxc в надежной системе Ubuntu:
sudo apt-get install lxc lxc-templates sudo lxc-create -t ubuntu -n my32bitbox -- --bindhome $LOGNAME -a i386 --release trusty sudo lxc-start -n my32bitbox # login as yourself sudo sh -c "sed s/deb/deb-src/ /etc/apt/sources.list >> /etc/apt/sources.list" sudo apt-get install devscripts sudo apt-get build-dep wine1.7 apt-get source wine1.7 cd wine1.7-* debuild -eDEB_BUILD_OPTIONS="parallel=8" -i -us -uc -b shutdown -h now # to exit the containerвот страница Вики о как построить 32-битное вино на 64-битном хосте с помощью lxc.
Comments