Pada sistem 64 bit saya, saya perhatikan bahwa direktori berikut ada:
/usr/include/c++/4.4/x86_64-linux-gnu/32/bits
Maka akan masuk akal bahwa pada sistem 32 bit saya yang telah diatur untuk kompilasi silang 64bit harus ada direktori yang sesuai seperti:
/usr/include/c++/4.4/i686-linux-gnu/64/bits
Saya mengecek ulang dan direktori ini tidak ada. Berjalan g++
dengan parameter verbose menunjukkan bahwa kompiler benar-benar mencari sesuatu di lokasi ini:
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.
Kesalahan tentang ignoring nonexistent directory
itu adalah petunjuk. Sayangnya, saya masih tidak tahu paket apa yang perlu saya instal agar direktori ini muncul jadi saya hanya menyalin /usr/include/c++/4.4/x86_64-linux-gnu/bits
direktori dari mesin 64 bit /usr/include/c++/4.4/i686-linux-gnu/64/bits
saya ke mesin 32 saya.
Sekarang kompilasi hanya dengan -m64
bekerja dengan benar. Kelemahan utama adalah bahwa ini masih bukan cara yang benar untuk melakukan sesuatu dan saya menduga lain kali Update Manager menginstal dan memperbarui ke g ++ hal-hal yang mungkin rusak.