2012-01-14 28 views
24

Tôi đã xây dựng GCC 4.7 trên hệ thống Linux 32 bit x86 của mình. Khi tôi cố gắng biên dịch chéo với cờ -m64 tôi nhận đượcGCC: xin lỗi, chưa thực hiện: chế độ 64 bit không được biên dịch trong

xin lỗi, chưa thực hiện: 64-bit chế độ không được biên dịch trong

trong khi trình biên dịch được cung cấp bởi mặc định bằng cách phân phối Linux của tôi có thể chéo- biên dịch với -m64.

Tôi phải chuyển sang ./configure để kích hoạt chế độ 64 bit trong GCC? Đây là những lựa chọn tôi sử dụng để xây dựng GCC 4.7:

$ /usr/local/bin/g++ -v Using built-in specs. 
COLLECT_GCC=/usr/local/bin/g++ 
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 
Target: i686-pc-linux-gnu 
Configured with: ./configure --enable-multiarch --with-cloog=/usr/local/ --with-mpfr=/usr/local/ --with-ppl=/usr/local/ --verbose --enable-languages=c,c++ 
Thread model: posix gcc version 4.7.0 20120113 (experimental) (GCC) 

EDIT:

enable-multilib và enable-mục tiêu = i686-pc-linux-gnu, x86_64-PC- linux-gnu

không thay đổi tình huống. Trình biên dịch vẫn than phiền về chế độ 65 bit không được biên soạn trong:

$ g ++ -v Sử dụng thông số kỹ thuật dựng sẵn. COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper Mục tiêu: i686-pc-linux-gnu Được cấu hình bằng: ./configure - có thể truy cập -multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages ​​= c, C++ - có thể -multilib --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu Mô hình chủ đề: posix gcc phiên bản 4.7.0 20120113 (thử nghiệm) (GCC)

$ g ++ -m64 c.cpp c.cpp: 1: 0: xin lỗi, chưa thực hiện: chế độ 64-bit không biên soạn trong

+0

'--enable-multiarch' gợi ý Debian (hoặc đạo hàm), và như tôi nhớ, GCC của FSF không thực sự hoạt động tốt với hệ thống đa hệ thống của Debian. Bạn có thể cần phải áp dụng các bản vá lỗi của Debian cho các ảnh chụp nhanh GCC của FSF. – hvd

+0

Tất nhiên nó sẽ không hoạt động như thế này. Multilib có khả năng tương thích * lạc hậu * và không * chuyển tiếp *. Để biên dịch mã 64 bit trên máy 32 bit, bạn phải xây dựng SDK tối thiểu: binutils + libc [musl, uclibc, glibc, ...] + gcc. – 0andriy

Trả lời

9

Bạn sẽ cần cả hai binutils và gcc cấu hình với:

--enable-multilib 

và có lẽ:

--enable-targets=i686-pc-linux-gnu,x86_64-pc-linux-gnu 

để hỗ trợ multilib (các -m64 và/hoặc -m32 tùy chọn). Bạn cũng sẽ cần hai phiên bản của các công cụ như glibc để có thể liên kết và chạy các tệp nhị phân kết quả.

+0

Nó không hoạt động với --enable-multilib và --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu: $ g ++ -v Sử dụng thông số kỹ thuật tích hợp sẵn. COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper Mục tiêu: i686-pc-linux-gnu Được cấu hình với: ./configure - enable-multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages ​​= c, C++ - enable-multilib --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu Mô hình chủ đề: posix phiên bản gcc 4.7.0 20120113 (thử nghiệm) (GCC) – Martin

+2

Bạn có binutils được cấu hình với các tùy chọn tương tự? – rubenvb

+0

Sai, Bạn không thể nhận * chuyển tiếp * tương thích. – 0andriy

19

Điều này thường có nghĩa là bạn đang sử dụng trình biên dịch sai (cũ).

Trình biên dịch mới hỗ trợ cả hai -m32 và -m64. Bạn phải đặt PATH thành các trình biên dịch mới (trong thư mục con gcc, MinGW của Rtools) trước bất kỳ trình biên dịch cũ nào trong Rtools.

Thử cập nhật đường dẫn lib nhị phân của trình biên dịch lên phiên bản 64 bit. Các tài nguyên khác như thư mục lib cũng phải thay đổi tương ứng.

+1

Tôi không hiểu tại sao một người nào đó đưa ra câu trả lời này một cuộc bỏ phiếu phủ định. Đây là câu trả lời đúng trong trường hợp của tôi. – Anoyz

+0

"Đường dẫn lib nhị phân của trình biên dịch của bạn" là gì? –

1

Chỉ giải quyết vấn đề này. Trong các biến môi trường, hãy xóa các mục nhập vào bất kỳ gói C++ đã lỗi thời nào.

Trong trường hợp của tôi, tôi đã làm việc trong Anaconda trên Windows 64 bit. Trong anaconda, tôi đã thực hiện 'conda install mingw libpython'. Mingw là trình biên dịch C++. Nhưng trước đó tôi đã cài đặt mingw của Cygwin để biên dịch C++ chưa được cập nhật. Đây là lý do xung đột. Tôi giải quyết vấn đề này bằng cách loại bỏ biến môi trường (PATH) tương ứng với các gói C++ này.
Tôi đã thử gần như tất cả các diễn đàn, giải pháp này hoạt động.

Vui lòng cho tôi biết trong trường hợp ai đó cần trợ giúp. :)

Các vấn đề liên quan