2010-10-05 33 views
7

Tôi đang mắc kẹt cho một buổi chiều đầy đủ bây giờ cố gắng để có được python để xây dựng trong chế độ 32bit. Tôi chạy một máy 64 bit Linux với openSUSE 11.3, tôi có các gói -devel và -32bit cần thiết được cài đặt để xây dựng các ứng dụng ở chế độ 32 bit.Làm thế nào để xây dựng 32 bit python 2,6 trên 64bit Linux?

Vấn đề với việc xây dựng python dường như không có trong bản thân chạy, nhưng trong lần chạy sau của setup.py, được gọi bằng lệnh make.

Tôi đã tìm thấy các hướng dẫn sau cho Ubuntu Linux: h ** p: //indefinitestudies.org/2010/02/08/how-to-build-32-bit-python-on-ubuntu-9-10- x86_64/

Khi tôi làm như mô tả, tôi nhận được kết quả như sau:

http://pastebin.com/eP8WJ8V4

Nhưng tôi có các gói -32bit của libreadline, libopenssl, etc.pp. được cài đặt, nhưng tất nhiên, chúng nằm trong/lib và/usr/lib và không/lib64 và/usr/lib64.

Khi tôi bắt đầu nhị phân python mà kết quả từ xây dựng này, tôi nhận được:

./python 
Python 2.6.6 (r266:84292, Oct 5 2010, 21:22:06) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
Traceback (most recent call last): 
    File "/etc/pythonstart", line 7, in <module> 
    import readline 
ImportError: No module named readline 

Vậy làm thế nào để có được setup.py để quan sát LDFLAGS = -L/lib lệnh ??

Bất kỳ trợ giúp nào được đánh giá cao.

Kính trọng, Philipp

+0

Nó có thể quá mức cần thiết, nhưng một cách để làm là thiết lập một chroot 32 bit và biên dịch nó ở đó. Nó ít nhất đảm bảo rằng bạn sẽ không kết hợp các thư viện 32 và 64 bit khi biên dịch. –

+0

điều này chắc chắn là quá mức cần thiết. Tôi có phải là người duy nhất trên thế giới muốn xây dựng một Linux 32 bit python ??? Tôi đang googling cho giờ bây giờ và chỉ tìm thấy hướng dẫn cho Mac. Ngoài blogpost đã đề cập ở trên, không ai có hướng dẫn cho Linux! – Philipp

+0

Bạn không phải là người duy nhất. Tôi sử dụng của tôi vì ràng buộc python Pro IDA là 32 bit và tôi không muốn một nhà tù đầy đủ ... Tôi chỉ cần làm nó bằng cách sử dụng liên kết bạn trỏ ở trên và nó làm việc chủ yếu là tốt cho tôi. Chỉ mô-đun _bsddb và _tkinter không được tạo. Trước đây vì nó đã cố gắng liên kết db-4.7 (phiên bản 64bits của tôi) thay vì db-4.8 là phiên bản 32 bit của tôi. Sau này bởi vì tôi không có bất kỳ bit 32 bit nào. – 246tNt

Trả lời

6

Bạn sẽ cần phải vượt qua cờ phù hợp với gcc và ld nói với trình biên dịch để biên dịch và tạo ra mã nhị phân 32bit.

Sử dụng --build--host.

./configure --help 
System types: 
    --build=BUILD  configure for building on BUILD [guessed] 
    --host=HOST  cross-compile to build programs to run on HOST [BUILD] 

Bạn cần sử dụng ./configure --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu để biên dịch cho Linux 32 bit trong hệ thống Linux 64 bit.

Lưu ý: Bạn vẫn cần phải thêm các tùy chọn ./configure khác.

+0

cảm ơn bạn rất nhiều. làm cho nó hoạt động ngay bây giờ. – Philipp

+0

"cấu hình: lỗi: đọc cho máy chủ là cần thiết cho xây dựng chéo". Chạy "locate" * -readelf '"chỉ cho phép"/usr/bin/x86_64-linux-gnu-readelf ". Tôi đoán tôi phải tìm và cài đặt một gói sẽ cung cấp "i686-linux-gnu-readelf"? –

+0

@JonathanHartley Nếu bạn không có các công cụ xây dựng thích hợp (và có thể là một trình biên dịch chéo) nó sẽ không hoạt động; không :) –

4

Về lý do tại sao, vì Kirk (và có thể là những người khác) tự hỏi, đây là một ví dụ: Tôi có một ứng dụng Python với dicts lớn của dicts chứa các đối tượng trọng lượng nhẹ. Điều này tiêu thụ gần như gấp đôi RAM trên 64bit như trên 32bit chỉ đơn giản là do các con trỏ. Tôi cần phải chạy một vài trường hợp của 2GB (32bit) mỗi và RAM thêm nhanh chóng tăng lên. Đối với FreeBSD, một công thức chi tiết cho nhà tù 32bit-on-64bit là ở đây http://www.gundersen.net/32bit-jail-on-64bit-freebsd/

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