14.04.01 32 bits: faltan archivos de inclusión de g ++ de 64 bits al realizar una compilación cruzada

8

Entonces, tengo instalado Xubuntu 14.04.1 de 32 bits. Tenemos algún código de interfaz en el que pretendemos lanzar SO para las diversas plataformas que admitimos y DLL de Windows. (Sí, lo sé, el lanzamiento binario es malo, pero tampoco es relevante aquí).

Estoy tratando de construir SO de 32 bits y 64 bits con 14.04.01 de 32 bits, usando argumentos -m32/ -m64gcc / g ++. La versión de 32 bits funciona bien, pero la versión de 64 bits falla con

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

Al registrar las inclusiones, ese archivo está genuinamente presente para 32 bits pero falta para 64 bits.

Googleando el problema, esto parece haber sucedido en el pasado para GCC / G ++ 4.6, pero luego está marcado como fijo. Pero 14.04.1 está utilizando GCC / G ++ 4.8, lo que sugiere que ha habido una regresión en esas bibliotecas en GCC / G ++ 4.8. ¿Es esto algo que alguien más ha visto?

Si fuera necesario, podría configurar una nueva máquina virtual para 14.04.1 de 64 bits y ver si eso recogería las versiones correctas de la biblioteca. Sin embargo, preferiría no hacerlo si es posible, porque tengo un montón de otras cosas que también tendría que reinstalar. ¿Hay una mejor solución? Y si instalara la versión 14.04.1 de 64 bits, ¿podría volver a compilar de forma cruzada a 32 bits sin perder encabezados en la otra dirección?

Graham
fuente
... quizás debería evitar mencionar cosas que "no son relevantes aquí", ya que no son relevantes
mikewhatever
2
¿Instalaste el g++-multilibpaquete?
steeldriver
@steeldriver Gracias, eso fue todo. Parece que la instalación de 64 bits lo tiene por defecto, pero la instalación de 32 bits no. OK, algo más para agregar a mi lista de verificación "cómo configurar una VM de compilación de Linux". :) Puede parecer básico, pero no vi esto como una respuesta en las preguntas de otras personas para el mismo error de compilación, y realmente no soy un experto en Linux.
Graham

Respuestas:

9

El archivo de 64 bits bits / c ++ config.h se proporciona en sistemas de 32 bits (y viceversa) al instalar el g++-multilibpaquete, por lo que debe instalar ese paquete utilizando Software Center, Synaptic o mediante el terminal utilizando

sudo apt-get install g++-multilib

Este es solo un paquete de dependencia que se resuelve g++-4.8-multilibpara la versión predeterminada de gcc / g ++, y a su vez depende de lib64stdc++-4.8-dev(compilación de 64 bits en 32 bits) o libx32stdc++-4.8-dev(compilación de 32 bits en 64 bits): son estos los que contienen el archivos de encabezado reales.

Hay un conjunto equivalente de paquetes para el compilador de C llana gcc.

conductor de acero
fuente
44
sudo apt-get install g++-5-multilibme consiguió la versión que necesitaba. Si esto no funciona para usted, la nota sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updatetambién es parte de mi configuración.
U007D