Auf meinem 64-Bit-System habe ich festgestellt, dass das folgende Verzeichnis vorhanden ist:
/usr/include/c++/4.4/x86_64-linux-gnu/32/bits
Es wäre dann sinnvoll, dass auf meinem 32-Bit-System, das für das 64-Bit-Cross-Compilieren eingerichtet wurde, ein entsprechendes Verzeichnis vorhanden sein sollte wie:
/usr/include/c++/4.4/i686-linux-gnu/64/bits
Ich habe es doppelt überprüft und dieses Verzeichnis existierte nicht. Das Ausführen g++
mit dem ausführlichen Parameter zeigte, dass der Compiler tatsächlich an dieser Stelle nach etwas suchte:
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
compilation terminated.
Der Fehler bezüglich ignoring nonexistent directory
war der Hinweis. Leider weiß ich immer noch nicht, welches Paket ich installieren muss, damit dieses Verzeichnis angezeigt wird. Deshalb habe ich das /usr/include/c++/4.4/x86_64-linux-gnu/bits
Verzeichnis einfach von meinem 64-Bit-Computer /usr/include/c++/4.4/i686-linux-gnu/64/bits
auf meinen 32-Computer kopiert .
Jetzt -m64
funktioniert nur das Kompilieren richtig. Der Hauptnachteil ist, dass dies immer noch nicht die richtige Vorgehensweise ist und ich vermute, dass bei der nächsten Installation von Update Manager und der Aktualisierung auf g ++ möglicherweise Probleme auftreten.