2010-07-16 25 views
47

Tôi đang sử dụng hệ thống 64 bit nhưng muốn có một bộ 32 bit nhị phân. Những tùy chọn nào tôi phải chuyển đến một kịch bản cấu hình để tạo ra một makefile 32bit/x86?Xây dựng 32 bit trên Linux 64 bit bằng cách sử dụng tập lệnh cấu hình tự động?

+0

Thêm một. Tôi đang cố gắng xây dựng Git cho Solaris. 'uname -m' trả về' i86pc'. Tất cả, nhưng một trong 10 thư viện phụ thuộc quá nhiều đã làm hỏng nền tảng. Chỉ OpenSSL xác định chính xác nó là x86_64. – jww

Trả lời

59

Đi qua đối số sau đây để cấu hình kịch bản cho phép tôi để xây dựng thư viện 32bit trên 64bit Linux

./configure --build=i686-pc-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 
+0

Không hoạt động cho tôi :(Vui lòng giúp tôi tại http://stackoverflow.com/questions/13780319/cant-build-32bit-wine-on-64bit-linux – m93a

+3

Nó không hoạt động cho tôi khi cố gắng xây dựng Nó đã cho tôi thông báo “configure: error: C++ compiler không thể tạo các file thực thi” –

+2

Câu trả lời này không đầy đủ, đó là lý do tại sao đôi khi bạn có thể gặp lỗi "trình biên dịch không thể tạo tập tin thực thi". Xem câu trả lời của tôi trong cùng một chủ đề – volpato

3

Giả sử gcc/g ++:

CPPFLAGS=-m32 ./configure ... 
+1

Cảm ơn câu trả lời. Kịch bản cấu hình vẫn đặt kiểu hệ thống và kiểu hệ thống máy chủ lưu trữ thành x86_64-unknown-linux-gnu. Bạn có biết làm thế nào để ghi đè lên những? –

38

câu trả lời của Jack là không đầy đủ.

Bạn cần hỗ trợ trình biên dịch/libc để biên dịch 32 bit. Trong một số distro như Ubuntu, những gì bạn cần làm là cài đặt các gói gcc-multilib và/hoặc g++-multilib:

sudo apt-get install gcc-multilib g++-multilib 

Sau đó, bạn có thể gọi cấu hình như bạn nói, specifyiong một loạt 32-bit và đi cờ biên soạn 32-bit:

./configure --host=i686-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" 

Nếu bạn không có multilib cài đặt, bạn sẽ nhận được một lỗi như configure: error: C compiler cannot create executables khi đi qua các -m32 cờ.

+3

Một số chương trình biên dịch 32 bit trên amd64 theo mặc định (ví dụ: wine,) có thể ngoài 64 bit và sẽ có thể tìm thấy multilib nếu được cài đặt.Không có vẻ là trường hợp của OP. Ngoài ra, Jack đã đúng về một điều - nó phải là '--build', không phải' --host'. '--host' nên được sử dụng nếu và chỉ khi bạn đang xây dựng trình biên dịch. Nó vẫn hoạt động vì có rất nhiều người không RTFM và viết các script sử dụng '--host' thay vì' --build', và các autotools mọi người đã phá vỡ n đủ thứ rồi. –

+0

các gói * -multilib không tồn tại nữa trong Debian ổn định. – Braiam

6

Tôi đã thành công hơn bằng cách đặt trình biên dịch tùy chỉnh thay thế. Bằng cách này, tất cả các bài kiểm tra cấu hình, thậm chí là những người sử dụng CFLAGS tùy chỉnh, làm việc một cách chính xác:

./configure CC="gcc -m32" CXX="g++ -m32" 

Bạn vẫn cần phiên bản 32-bit của tất cả các thư viện các ứng dụng sử dụng dĩ nhiên, vì vậy bất kỳ lỗi nào về việc thiếu các thư viện đang đề cập đến những cái 32 bit.

1

Một cách thay thế cho những điều được mô tả ở trên sẽ là (nếu bạn có) sử dụng trình biên dịch x86 chuyên dụng. Dòng cấu hình sau đó sẽ như thế này (tôi đặt tên cho x86-công cụ sau khi mô hình "<toolName> -x86"):

CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure 
Các vấn đề liên quan