Trên hệ thống 64 bit của tôi, tôi nhận thấy rằng thư mục sau tồn tại:
/usr/include/c++/4.4/x86_64-linux-gnu/32/bits
Sau đó, điều đó có nghĩa là trên hệ thống 32 bit của tôi đã được thiết lập để biên dịch chéo 64 bit nên có một thư mục tương ứng như:
/usr/include/c++/4.4/i686-linux-gnu/64/bits
Tôi đã kiểm tra lại và thư mục này không tồn tại. Chạy g++
với tham số verbose cho thấy trình biên dịch thực sự đang tìm kiếm thứ gì đó ở vị trí này:
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.
Các lỗi liên quan đến ignoring nonexistent directory
là đầu mối. Thật không may, tôi vẫn không biết mình cần cài đặt gói nào để thư mục này hiển thị nên tôi chỉ sao chép /usr/include/c++/4.4/x86_64-linux-gnu/bits
thư mục từ máy 64 bit sang /usr/include/c++/4.4/i686-linux-gnu/64/bits
máy 32 của mình.
Bây giờ biên dịch với chỉ các -m64
công việc chính xác. Hạn chế lớn là đây vẫn chưa phải là cách chính xác để thực hiện và tôi đoán lần sau khi Trình quản lý cập nhật cài đặt và cập nhật lên g ++, mọi thứ có thể bị hỏng.