C++ construye binario de 32 bits en un sistema de 64 bits

C++ construye binario de 32 bits en un sistema de 64 bits

Tengo un proyecto que quiero poder construir como binario de 64 bits y como uno de 32 bits.
Mi máquina en sí es de 64 bits y la compilación de 64 bits funciona bien.

Lo estoy usando cakepara construir mi proyecto y usé set_target_properties(clib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")para forzar una compilación de 32 bits.

Cada vez que intento construir esto, el compilador arroja un error porque lo estoy incluyendo <iostream>en mi programa principal. Al principio se quejó de que no podía encontrar <bits/c++config.h>cuál estaba incluido en algún lugar del interior <iostream>.
Encontré un par de cosas en línea que me llevaron a instalarlas g++-multiliben mi sistema. Ahora el error anterior desapareció, pero en su lugar aparece el error /usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directoryque también tiene su origen en el archivo #include <iostream>.

Revisé dónde está este archivo y lo encontré, /usr/include/x86_64-linux-gnu/asm/errno.hpero (como antes, c++config.hla x86_64carpeta parece no buscarse en una compilación de 32 bits (lo cual tiene sentido).
También lo encontré en /usr/include/linux/errno.huna carpeta idéntica a la preciosa, pero como Puedes ver que no está en la asmsubcarpeta.
Obviamente, podría moverlo manualmente a esa carpeta, pero tengo la sensación de que en general hay algún problema con mi configuración aquí.

Entonces, ¿qué más tengo que configurar para poder compilar mi código (con a #include <iostream>) como un ejecutable de 32 bits? ¿Existe algo así como una versión de 32 bits de la biblioteca estándar?

EDITAR:
estoy usando Linux Mint 18.3 con g++ --versionde g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0ycmake v.3.10.2

Respuesta1

Muy bien, descubrí cuál era el problema:
cuando descubrí que tenía que usar, g++-multilibseguí adelante y lo busqué en mi administrador de paquetes ( synapticen mi caso). Ese enumeró un montón de versiones, así que verifiqué qué versión g++había instalado y luego instalé el g++-multilibpaquete apropiado que en mi caso era el g++-7-multilib.

Sin embargo, lo que no se instaló fue el gcc-multilibpaquete que parece ser el causante del problema en mi caso. Después de haberlo instalado, funcionó como se esperaba.


En pocas palabras: si hubiera instalado el g++-multilibpaquete (sin una versión en el nombre) para empezar, no habría tenido este problema.

información relacionada