2012-06-18 68 views
13

Có lẽ một câu hỏi rất tầm thường:Làm thế nào để biên dịch chương trình C++ thành 64-bit trên máy 64 bit?

Tôi cần biên dịch chương trình dưới dạng 64 bit (trước đây makefile được viết để biên dịch nó dưới dạng 32 bit).

Tôi thấy tùy chọn -m32 xuất hiện trong các tham số dòng lệnh với mỗi biên dịch tệp. Vì vậy, tôi sửa đổi makefile để thoát khỏi -32 trong OPTFLAG, nhưng một lần nữa khi chương trình biên dịch, tôi vẫn thấy -m32 hiển thị và nhị phân vẫn còn 32-bit. M32 này có đến từ đâu đó không?

+0

Bạn đang cố gắng biên dịch cái gì? Có lẽ bạn có thể cấu hình lại nó với các cờ thích hợp nếu nó sử dụng các autotools thay vì tinh chỉnh Makefile. Nếu nó không phải là phần mềm của riêng bạn, bạn nên yêu cầu cộng đồng tương ứng về cách xây dựng phần mềm của họ đúng cách. Chỉ từ quan điểm gcc, bạn cần phiên bản thích hợp của nó và '-m64' http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options. – mlt

+0

thực hiện không xác định trước -m32, cũng như không có bất kỳ thành phần hệ thống nào khác (trừ khi có bất kỳ sửa đổi distro cụ thể có liên quan, nhưng thường không có), nếu đó là những gì bạn đang yêu cầu. – hvd

+0

@mlt -m64 không cần thiết; -m64 là mặc định cho trình biên dịch 64 bit. – hvd

Trả lời

14

-m32 chỉ có thể được sắp từ một nơi nào đó trong makefiles của bạn, bạn sẽ phải theo dõi nó xuống (sử dụng một grep đệ quy) và loại bỏ nó.

When I am able to force -m64, I get "CPU you selected does not support x86-64 instruction set".Any clues?. uname -a gives x86_64

Lỗi đó có nghĩa là có một tùy chọn như -march=i686 trong makefiles, không hợp lệ để biên dịch 64 bit, hãy thử xóa quá trình đó.

Nếu bạn không thể xóa nó (cố gắng hơn!), Sau đó thêm -march=x86-64 sau khi nó trên dòng lệnh sẽ chỉ định loại CPU 64 bit chung.

4

Nếu phần mềm bạn đang cố gắng để xây dựng là autotools dựa trên, điều này sẽ làm các trick:

./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make 

Hoặc, chỉ một Makefile đơn giản:

env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make 
+0

Như tôi đã đề cập trong một nhận xét, '-m64' là mặc định cho gcc được cấu hình 64 bit. Nếu bạn cần chỉ định '-m64', bạn đang làm gì đó sai. Nếu gói nghĩ rằng nó cần thêm '-m32', nó có thể làm nhiều hơn thế, và bạn không làm việc với phần còn lại. – hvd

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