3 votes

Compiler 32 bits sur un système 64 bits

J'essaie de compiler une version 32 bits de Python sur un système ubuntu 64 bits avec la commande configure suivante :

CC="gcc -m32" LDFLAGS="-L/lib32 -L/usr/lib32 \ -Lpwd/lib32 -Wl,-rpath,/lib32 \
    -Wl,-rpath,/usr/lib32" \ ./configure --prefix=/opt/pym32

puis make, make install. Pas d'erreur, mais il doit y avoir quelque chose qui ne va pas car un "readelf -h Python" me dit que Python a été compilé en tant que ELF64 à la place.

6voto

d456 Points 221

Utilisez "--build" et "--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]

Vous devez utiliser

./configure --build=x86_64-pc-linux-gnu --host=i386-pc-linux-gnu

pour compiler pour Linux 32 bits dans un système Linux 64 bits. Vous devez toujours ajouter l'autre ./configure options.

2voto

Alex Che Points 121

C'est ainsi que j'ai réussi à construire et à installer latéralement Python 3.5.2 en 32 bits sur Ubuntu 16, la version 64 bits étant déjà installée par apt :

# Some prerequisites:
sudo apt install libffi-dev:i386
sudo apt install libssl1.0.0:i386
sudo apt install libssl-dev:i386
sudo apt-get install libncurses-dev:i386 libreadline-dev:i386 # for command history to work in Python terminal
sudo apt-get install binutils-multiarch
sudo ln -s /usr/bin/readelf /usr/bin/i386-linux-gnu-readelf
# Going to be installed to /opt/python-3.5.2-i386
ac_cv_file__dev_ptc=no ac_cv_file__dev_ptmx=yes \
CFLAGS=-m32 CXXFLAGS=-m32 \
LDFLAGS="-m32 -L/lib32 -L/usr/lib32 -L/lib/i386-linux-gnu -L/usr/lib/i386-linux-gnu -Wl,-rpath,/lib32 -Wl,-rpath,/usr/lib32 -Wl,-rpath,/lib/i386-linux-gnu -Wl,-rpath,/usr/lib/i386-linux-gnu" \
./configure --build=x86_64-linux-gnu --host=i386-linux-gnu \
--enable-ipv6 --prefix=/opt/python-3.5.2-i386 --with-system-ffi
make
sudo make install
# The following may be needed to build some additional extensions, which are statically 
# built-in in existing python3 intallation on host and won't be built otherwise
sudo PATH=/opt/python-3.5.2-i386/bin:$PATH make
sudo PATH=/opt/python-3.5.2-i386/bin:$PATH make install

Après ça :

~$ python3 -V
Python 3.5.2
~$ python3 -c 'import struct; print(struct.calcsize("P") * 8)'
64
~$ /opt/python-3.5.2-i386/bin/python3 -V
Python 3.5.2
~$ /opt/python-3.5.2-i386/bin/python3 -c 'import struct; print(struct.calcsize("P") * 8)'
32

0voto

Nelson Reis Points 149

Si vous voulez que la compilation soit déboguée, vous devriez poster (dans un pastebin) votre sortie verbeuse de gcc. Sinon, il est impossible de savoir.

La solution suggérée d'utiliser chroot peut vous aider et Mikko a gentiment proposé un lien pour guider les utilisateurs dans cette démarche. comment utiliser chroot pour Python 32bit sur une machine 64bit :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X