
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 cake
para 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++-multilib
en 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 directory
que 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.h
pero (como antes, c++config.h
la x86_64
carpeta parece no buscarse en una compilación de 32 bits (lo cual tiene sentido).
También lo encontré en /usr/include/linux/errno.h
una carpeta idéntica a la preciosa, pero como Puedes ver que no está en la asm
subcarpeta.
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++ --version
de g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
ycmake v.3.10.2
Respuesta1
Muy bien, descubrí cuál era el problema:
cuando descubrí que tenía que usar, g++-multilib
seguí adelante y lo busqué en mi administrador de paquetes ( synaptic
en mi caso). Ese enumeró un montón de versiones, así que verifiqué qué versión g++
había instalado y luego instalé el g++-multilib
paquete apropiado que en mi caso era el g++-7-multilib
.
Sin embargo, lo que no se instaló fue el gcc-multilib
paquete 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++-multilib
paquete (sin una versión en el nombre) para empezar, no habría tenido este problema.