2010-10-05 24 views
7

Sono bloccato per un intero pomeriggio ora cercando di far compilare python in modalità 32 bit. Gestisco una macchina Linux a 64 bit con openSUSE 11.3, ho installato i pacchetti necessari -devel e -32bit per creare applicazioni in modalità 32 bit.Come costruire 32bit python 2.6 su 64 bit Linux?

Il problema con la build python sembra non essere nella stessa esecuzione, ma nella successiva esecuzione di setup.py, invocata da make.

Ho trovato le seguenti istruzioni per Ubuntu Linux: h ** p: //indefinitestudies.org/2010/02/08/how-to-build-32-bit-python-on-ubuntu-9-10- x86_64/

Quando non come descritto, ottengo il seguente output:

http://pastebin.com/eP8WJ8V4

Ma ho i pacchetti -32bit di libreadline, libopenssl, etc.pp. installato, ma ovviamente risiedono in/lib e/usr/lib e non/lib64 e/usr/lib64.

Quando avvio il binario Python che deriva da questa build, ottengo:

./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 

Così come raggiungere setup.py per osservare l'= -L comando LDFLAGS/lib ??

Qualsiasi aiuto è molto apprezzato.

saluti, Philipp

+0

Potrebbe essere eccessivo, ma un modo per farlo è impostare una prigione chroot a 32-bit e compilarla lì. Garantisce almeno che non si mischiano le librerie a 32 e 64 bit durante la compilazione. –

+0

questo è decisamente eccessivo. Sono l'unica persona al mondo a desiderare una build Linux a 32 bit di python ??? Sto cercando su google per ore e trovo solo le istruzioni per Mac. A parte il blogpost menzionato sopra, nessuno ha istruzioni per Linux! – Philipp

+0

Non sei il solo. Io uso il mio perché i collegamenti Python IDA Pro sono a 32 bit e non voglio un intero carcere ... l'ho fatto usando il link puntatore sopra e ha funzionato per lo più bene per me. Solo i moduli _bsddb e _tkinter non sono stati creati. Il primo perché ha provato a collegare db-4.7 (che è la mia versione a 64 bit) invece di db-4.8, che è la mia versione a 32 bit. Quest'ultimo perché non ho alcun tk 32 bit. – 246tNt

risposta

6

Avrai bisogno di passare i appropriate bandierine per gcc e ld per dire al compilatore per compilare e produrre file binari a 32 bit.

Utilizzare --build e --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] 

è necessario utilizzare ./configure --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu per compilare per Linux a 32 bit in un sistema Linux a 64-bit.

Nota: È ancora necessario aggiungere le altre opzioni ./configure.

+0

grazie mille. ha funzionato ormai. – Philipp

+0

"configure: error: readelf per l'host è richiesto per cross build". L'esecuzione di "locate" * -readelf "" dà solo "/ usr/bin/x86_64-linux-gnu-readelf". Presumo che devo trovare e installare un pacchetto che fornirà "i686-linux-gnu-readelf"? –

+0

@JonathanHartley Se non si dispone degli strumenti di compilazione appropriati (e probabilmente di un cross compilatore) non funzionerà; no :) –

4

Per quanto riguarda il motivo, dal momento che Kirk (e probabilmente altri) si chiedono, ecco un esempio: ho un'app Python con grandi ditiche di dicts contenenti oggetti leggeri. Questo consuma quasi il doppio della RAM su 64 bit rispetto a 32 bit semplicemente a causa dei puntatori. Ho bisogno di eseguire alcune istanze di 2 GB (32 bit) ciascuna e la RAM aggiuntiva si aggiunge rapidamente. Per FreeBSD, una ricetta dettagliata per la prigione a 32 bit su 64bit è qui http://www.gundersen.net/32bit-jail-on-64bit-freebsd/

Problemi correlati