Falta incluir “bits / c ++ config.h” al comstackr de forma cruzada progtwig de 64 bits en 32 bits en Ubuntu

Estoy ejecutando la versión de 32 bits de Ubuntu 10.10 y tratando de realizar una comstackción cruzada con un objective de 64 bits. Basado en mi investigación, he instalado el paquete g ++ – multilib.

El progtwig es un mundo de hola muy simple:

#include  int main( int argc, char** argv ) { std::cout << "hello world" << std::endl; return 0; } 

Comstackr:

 g++ -m64 main.cpp 

Error:

 In file included from main.cpp:1: /usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory comstacktion terminated. 

Encontré un archivo c++config.h pero residen en los directorios i486-linux-gnu e i686-linux-gnu en /usr/include/c++/4.4/ No hay c++config.h en /usr/include/c++/bits .

¿Alguna idea sobre lo que me estoy perdiendo? Comstackr sin el indicador -m64 funciona bien (se crea a.out y se ejecuta correctamente).

Editar Gracias a la sugerencia de @nightcracker, hice un poco más de investigación sobre la estructura de inclusión en los sistemas de 32 y 64 bits. He agregado una respuesta a continuación que “soluciona” el problema temporalmente, pero creo que se interrumpirá en la próxima actualización. Básicamente, me falta un directorio llamado /usr/include/c++/4.4/i686-linux-gnu/64 que debe contener un subdirectorio llamado bits que tiene el archivo de inclusión faltante. ¿Alguna idea de qué paquete debería encargarse de esto?

Agregué esta respuesta parcialmente porque solucionó mi problema del mismo problema y puedo marcar esta pregunta yo mismo.

Pude solucionarlo haciendo lo siguiente:

 sudo apt-get install gcc-multilib g++-multilib 

Si ha instalado una versión de gcc / g++ que no se envía por defecto (como g++-4.8 on lúcido), también querrá hacer coincidir la versión:

 sudo apt-get install gcc-4.8-multilib g++-4.8-multilib 

¿ -I/usr/include/c++/4.4/i486-linux-gnu agregar -I/usr/include/c++/4.4/i486-linux-gnu o -I/usr/include/c++/4.4/i686-linux-gnu ?

Mientras comstackba en RHEL 6.2 (x86_64), instalé los paquetes devst libstdc ++ de 32 bits y 64 bits, pero tenía el problema “c ++ config.h no existe tal archivo o directorio “.

Resolución:

El directorio /usr/include/c++/4.4.6/x86_64-redhat-linux faltaba.

Hice lo siguiente:

 cd /usr/include/c++/4.4.6/ mkdir x86_64-redhat-linux cd x86_64-redhat-linux ln -s ../i686-redhat-linux 32 

Ahora puedo comstackr binarios de 32 bits en un sistema operativo de 64 bits.

Parece ser un error tipográfico en ese paquete de gcc. La solución:

 mv /usr/include/c++/4.x/i486-linux-gnu /usr/include/c++/4.x/i686-linux-gnu/64 

En mi sistema de 64 bits noté que el siguiente directorio existía:

 /usr/include/c++/4.4/x86_64-linux-gnu/32/bits 

Entonces tendría sentido que en mi sistema de 32 bits que se había configurado para la comstackción cruzada de 64 bits debería haber un directorio correspondiente como:

 /usr/include/c++/4.4/i686-linux-gnu/64/bits 

Lo comprobé dos veces y este directorio no existía. La ejecución de g++ con el parámetro detallado mostró que el comstackdor realmente buscaba algo en esta ubicación:

 jesse@shalored:~/projects/test$ g++ -v -m64 main.cpp Using built-in specs. Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu Thread model: posix gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) COLLECT_GCC_OPTIONS='-v' '-m64' '-shared-libgcc' '-mtune=generic' /usr/lib/gcc/i686-linux-gnu/4.4.5/cc1plus -quiet -v -imultilib 64 -D_GNU_SOURCE main.cpp -D_FORTIFY_SOURCE=2 -quiet -dumpbase main.cpp -m64 -mtune=generic -auxbase main -version -fstack-protector -o /tmp/ccMvIfFH.s ignoring nonexistent directory "/usr/include/c++/4.4/i686-linux-gnu/64" ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" ignoring nonexistent directory "/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../i686-linux-gnu/include" #include "..." search starts here: #include < ...> search starts here: /usr/include/c++/4.4 /usr/include/c++/4.4/backward /usr/local/include /usr/lib/gcc/i686-linux-gnu/4.4.5/include /usr/lib/gcc/i686-linux-gnu/4.4.5/include-fixed /usr/include/x86_64-linux-gnu /usr/include End of search list. GNU C++ (Ubuntu/Linaro 4.4.4-14ubuntu5) version 4.4.5 (i686-linux-gnu) compiled by GNU C version 4.4.5, GMP version 4.3.2, MPFR version 3.0.0-p3. GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=128197 Compiler executable checksum: 1fe36891f4a5f71e4a498e712867261c In file included from main.cpp:1: /usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory comstacktion terminated. 

El error con respecto al ignoring nonexistent directory fue la clave. Desafortunadamente, todavía no sé qué paquete necesito instalar para que aparezca este directorio, así que simplemente copié el directorio /usr/include/c++/4.4/x86_64-linux-gnu/bits de mi máquina de 64 bits a /usr/include/c++/4.4/i686-linux-gnu/64/bits en mi máquina 32.

Ahora comstackr solo con -m64 funciona correctamente. El mayor inconveniente es que todavía no es la forma correcta de hacer las cosas y supongo que la próxima vez que Update Manager se instale y actualice a g ++ las cosas se pueden romper.

Este error se corrigió en “gcc-4.6”.

https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/793411

El archivo de 64 bits bits c++config.h está en sistemas de 32 bits y viceversa. Instala el paquete g++-multilib , para que puedas instalarlo fácilmente en la terminal usando el comando:

 sudo apt-get install g++-multilib