web-dev-qa-db-fra.com

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 à l'aide de la commande de configuration suivante:

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

puis faire, faire installer. Aucune erreur, mais il devrait y avoir quelque chose qui ne va pas car un "readelf -h python" me dit que python a été construit à la place en tant que ELF64.

2
Gabriele B

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=i686-pc-linux-gnu pour compiler sous Linux 32 bits dans un système Linux 64 bits. Vous devez toujours ajouter les autres options ./configure.

4
Arnel A. Borja

C’est ainsi que j’ai réussi à construire et installer latéralement Python32.3 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
1
Alex Che

Si vous voulez que la compilation soit déboguée, vous devez publier (dans un Pastebin) votre sortie commentée de gcc. Sinon, il est impossible de savoir.

La solution suggérée d’utiliser chroot peut vous aider et Mikko propose un lien pour guider les utilisateurs dans comment utiliser chroot pour 32 bits python sur une machine 64 bits :

0