LINUX.ORG.RU

собрать 32хбитный бинарник под 64хбитной системой


0

1

Пытаюсь собрать 32хбитный ffmpeg на 64хбитном десктопе, чтобы запускать бинарник на 32хбитном сервере.

Делаю configure:

./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --prefix=/home/benderamp/apps/ffmpeg-vpx --arch=i686 --target-os=linux --enable-cross-compile

make

для получившегося бинарника:

file ffmpeg

ffmpeg: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, stripped

на сервере соответственно не запускается.

чую, что от параметра --arch толку никакого нету, т.к. и для i686 и для x86 и для x86_64 скрипт configure внутри заменяет значение на x86, но что тогда вместо него использовать?

★★★★★

Ответ на: комментарий от bender

А multilib установлен для этого?
Я лично скрипт запускаю перед сборкой 32-битных приложений, который устанавливает все нужные переменные окружения и использует нужный компилятор с нужными параметрами.

UVV ★★★★★ ()

>configure --cc=«gcc -m32» сразу ругается
Попробуй скомпилировать простой тестовый файл.

echo 'main(){ puts(«Hello, world!»); }' >testfile.c
gcc -m32 -o testfile testfile.c
file testfile

а как его в configure почеловечески передать не в курсе


Попробуй ./configure --host=i686-pc-linux-gnu
Если не пойдет, попробуй export CFLAGS="-m32"

proud_anon ★★★★★ ()

В общем, ничего похожего на multilib в любых вариациях в репозиториях суси нету. попробовал собрать тестовый бинарник:

g++ -m32 test.cc


по ошибкам о недостающих файлах доустановил glibc-devel-32bit, libstdc++45-32bit и gcc45-32bit - судя по всему multilib просто размазан по ним - 32хбитный тестовый бинарник собрался.

после этого опция --cc=«gcc -m32» ошибку выдавать перестала

./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --prefix=/home/benderamp/apps/ffmpeg-vpx --cc=«gcc -m32»

ffmpeg собрался, только пришлось еще доустановить 32хбитные пакеты для либ, перечисленных в --enable-xxx и сменить архитектуру их -devel версий на i586 (это уже особенности пакетирования опенсуси).

file ffmpeg

ffmpeg: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, stripped

всем спасибо за советы

bender ★★★★★ ()
Ответ на: комментарий от anonymous

>--target а не --host.

Хотя тема уже решена, все-таки почему --target, если как раз --host?

proud_anon ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.