Компилировать 32-битные в 64-битной системе

Я пытаюсь скомпилировать 32-битную версию python в 64-битной системе Ubuntu с помощью следующей команды configure:

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

затем make, make install. Нет ошибок, но это должно быть что-то не так, потому что «readelf -h python» говорит мне, что вместо этого python был построен как ELF64.

2
задан 5 September 2011 в 15:52

3 ответа

Используйте "-сборка" и "-хост".

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

Необходимо использовать ./configure --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu скомпилировать для 32-разрядного Linux в 64-разрядной системе Linux. Все еще необходимо добавить другой ./configure опции.

4
ответ дан 2 December 2019 в 02:09

Если Вы хотите, чтобы компиляция была отлажена, необходимо отправить (в pastebin) подробный вывод от gcc. Иначе невозможно знать.

Предложенное решение использования chroot может помочь Вам, и Mikko любезно предлагает ссылку для направления пользователей в том, как использовать chroot для Python на 32 бита на машине на 64 бита:

0
ответ дан 2 December 2019 в 02:09

Это - то, как мне удалось создать и установка стороны 32-разрядный Python 3.5.2 на Ubuntu 16, имея 64-разрядную версию, уже установленную Кв.:

# 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

После этого:

~$ 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
ответ дан 2 December 2019 в 02:09

Другие вопросы по тегам:

Похожие вопросы: