¿Es posible compilar un proyecto en 32 bits con cmakey gccen un sistema de 64 bits ? Probablemente lo sea, pero ¿cómo lo hago?
Cuando lo intenté de la manera "ignorante", sin establecer ningún parámetro / flags / etc, solo configurar LD_LIBRARY_PATHpara encontrar las bibliotecas vinculadas ~/tools/libparece ignorarlo y solo buscar en subdirectorios llamados lib64 .

Respuestas:
fuente
-m32alCFLAGS, probablemente mediante la configuraciónCMAKE_REQUIRED_FLAGS.exportsignifica ¿A dónde pertenece? Te archivos de cabecera? Elmakefile? No, no es una respuesta para mí como principiante.cmake(sin embargo, en su caso, si tiene un Makefile, entonces lo estaría usandomake).$ gcc test.c -o testc $ file testc testc: ELF ejecutable LSB de 64 bits, x86-64, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.9, no despojado $ 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 ejecutable LSB de 32 bits, Intel 80386, versión 1 (SYSV), vinculado dinámicamente (usa libs compartidas), para GNU / Linux 2.6.9, no despojado $ ldd testc linux-gate.so.1 => (0x009aa000) libc.so.6 => /lib/libc.so.6 (0x00780000) /lib/ld-linux.so.2 (0x0075b000)En resumen: use la
-m32bandera para compilar un binario de 32 bits.Además, asegúrese de tener instaladas las versiones de 32 bits de todas las bibliotecas necesarias (en mi caso, todo lo que necesitaba en Fedora era glibc-devel.i386)
fuente
sudo apt-get install gcc-multilibEn versiones posteriores de CMake, una forma de hacerlo en cada objetivo es:
set_target_properties(MyTarget PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")No sé cómo hacerlo globalmente.
fuente
cmake -D CMAKE_CXX_FLAGS=-m32 . && makePara C ++, podría hacer:
Esto funciona con cmake.
fuente
Una forma es configurar un entorno chroot. Debian tiene varias herramientas para eso, por ejemplo debootstrap
fuente
Para cualquier aplicación compleja, sugiero usar un contenedor lxc . Los contenedores lxc son "algo en el medio entre un chroot con esteroides y una máquina virtual completa".
Por ejemplo, aquí hay una manera de construir wine de 32 bits usando lxc en un sistema Ubuntu Trusty:
Aquí está la página wiki sobre cómo construir vino de 32 bits en un host de 64 bits usando lxc .
fuente
atomeditor de texto para máquina de 32 bits en 64 bits?