2010-10-05 16 views
7

Estoy atrapado por una tarde completa tratando de hacer que Python construya en modo de 32 bits. Ejecuto una máquina Linux de 64 bits con openSUSE 11.3, tengo los paquetes necesarios -devel y -32 bit instalados para construir aplicaciones en modo de 32 bits.¿Cómo construir 32bit python 2.6 en Linux de 64 bits?

El problema con la construcción de python parece no estar en la ejecución de make, sino en la ejecución posterior de setup.py, invocada por make.

Encontré las siguientes instrucciones para Ubuntu Linux: h ** p: //indefinitestudies.org/2010/02/08/how-to-build-32-bit-python-on-ubuntu-9-10- x86_64/

Cuando yo como se describe, me sale el siguiente resultado:

http://pastebin.com/eP8WJ8V4

Pero tengo los paquetes de -32bit libreadline, libopenssl, etc.pp. instalado, pero por supuesto, residen en/lib y/usr/lib y no/lib64 y/usr/lib64.

Cuando inicio el pitón binario que resulta de esta construcción, me sale:

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

Entonces, ¿cómo conseguir setup.py para observar el LDFLAGS = -L comando/lib ??

Cualquier ayuda es muy apreciada.

Saludos, Philipp

+0

Puede ser exagerado, pero una forma de hacerlo es configurar una jaula chroot de 32 bits y compilarla allí. Por lo menos, garantiza que no se mezclarán bibliotecas de 32 y 64 bits cuando se compile. –

+0

esto es definitivamente excesivo. ¿Soy la única persona en el mundo que quiere una versión de Python Linux de 32 bits? Estoy buscando en Google durante horas y solo encuentro instrucciones para Mac. ¡Además del blogpost mencionado anteriormente, nadie tiene instrucciones para Linux! – Philipp

+0

No eres el único. Yo uso el mío porque IDA Pro los enlaces de python son de 32 bits y no quiero una cárcel completa ... Lo acabo de hacer usando el enlace que señalaste arriba y funcionó bien para mí. Solo los módulos _bsddb y _tkinter no se compilaron. El primero porque intentó vincular db-4.7 (que es mi versión de 64 bits) en lugar de db-4.8, que es mi versión de 32 bits. El último porque no tengo ningún 32 bits. – 246tNt

Respuesta

6

Tendrá que pasar los banderas apropiadas para gcc y ld para decirle al compilador para compilar y producir binarios de 32 bits.

Use --build y --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] 

Es necesario utilizar ./configure --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu compilar para Linux de 32 bits en un sistema Linux de 64 bits.

Nota: Aún necesita agregar las otras opciones ./configure.

+0

muchas gracias. lo tengo funcionando ahora. – Philipp

+0

"configure: error: se requiere readelf para el host para compilaciones cruzadas". La ejecución de "locate '* -readelf'" solo da "/ usr/bin/x86_64-linux-gnu-readelf". Supongo que tengo que encontrar e instalar un paquete que proporcione "i686-linux-gnu-readelf". –

+0

@JonathanHartley Si no tiene las herramientas de compilación adecuadas (y probablemente un compilador cruzado), no funcionará; no :) –

4

En cuanto a por qué, dado que Kirk (y probablemente otros) se preguntan, he aquí un ejemplo: tengo una aplicación de Python con grandes dicts de dicts que contienen objetos livianos. Esto consume casi el doble de RAM en 64 bits que en 32 bits simplemente debido a los punteros. Necesito ejecutar algunas instancias de 2GB (32 bits) cada una y la RAM adicional se suma rápidamente. Para FreeBSD, una receta detallada para la cárcel de 32 bits a 64 bits está aquí http://www.gundersen.net/32bit-jail-on-64bit-freebsd/

Cuestiones relacionadas