LINUX.ORG.RU

Не собирается 32-битная библиотека на 64-битной системе

 , , , ,


1

1

Пытаюсь собрать WineASIO в Debian 9. Собираю по этому образцу https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=wineasio . 64-битная версия библиотеки собралась, а 32-битная выдаёт следующее:

ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/wine/libuuid.a(uuid.o)' is incompatible with i386 output
ld: Relocatable linking with relocations from format elf64-x86-64 (/usr/lib/x86_64-linux-gnu/wine/libwinecrt0.a(dll_entry.o)) to format elf32-i386 (wineasio.KabUFW.o) is not supported
winebuild: ld failed with status 1
winegcc: /usr/lib/wine/winebuild failed
Makefile:114: ошибка выполнения рецепта для цели «wineasio.dll.so»
make: *** [wineasio.dll.so] Ошибка 2

Кто объяснит, что оно от меня хочет?

UPD: рано я начал радоваться. Собраться-то оно собралось, вот только не работает. ldd выдаёт следущее:

ldd wineasio.dll.so
	linux-vdso.so.1 (0x00007ffd8f13d000)
	libjack.so.0 => /usr/lib/x86_64-linux-gnu/libjack.so.0 (0x00007fe477da1000)
	libwine.so.1 => not found
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe477a9d000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe4776fe000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe4774e1000)
	libopus.so.0 => /usr/lib/x86_64-linux-gnu/libopus.so.0 (0x00007fe477290000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe477088000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe476e84000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe476b02000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe4768eb000)
	/lib64/ld-linux-x86-64.so.2 (0x0000560c169e1000)
То есть как минимум libwine оно нифига не видит. Как такое может быть, ума не приложу.

UPD2: всё работает, проблема решена. Кому интересно, вот тут подробное описание, как собрать multilib WineASIO под Debian 9: Не собирается 32-битная библиотека на 64-битной системе (комментарий)

★★★★★

Последнее исправление: meliafaro (всего исправлений: 2)

В итоге оно собралось, запустилось и даже работает! На всякий случай подробно распишу, что я делал, мб, сэкономлю кому-то время.

Предполагается, что в системе уже включена поддержка 32-битной архитектуры и установлены базовые пакеты, необходимые для сборки, а также ed - он необходим для скрипта из исходников.

Ставим jack 2, в т. ч. dev-пакеты и 32-битные версии библиотек:

$ sudo apt-get install jackd2 libjack-jackd2-0 libjack-jackd2:i386 libjack-jackd2-dev libjack-jackd2-dev:i386

Ставим wine-development, в т. ч. dev-пакеты и 32-битные версии библиотек:

$ sudo apt-get install wine-development libwine-development-dev libwine-development-dev:i386

Ставим 32-битную dev-версию libc:

$ sudo apt-get install libc6-dev:i386

Не уверен, что я ничего не упустил, возможно, это не все пакеты, которые нужны и я что-то ещё необходимое поставил, пока возился.

Скачиваем и распаковываем исходники WineASIO с https://sourceforge.net/projects/wineasio/.

Теперь нам нужно слегка подправить исходный код и Makefile-ы с учётом специфики Debian. Открываем файлы с исходным кодом - main.c, asio.c и regsvr.c и заменяем строки

#include "wine/debug.h"
на
#include "wine-development/debug.h"

Правим Makefile и Makefile64 - в 16 строке, в переменной INCLUDE_PATH везде заменяем wine на wine-development. В переменной wineasio_dll_LDFLAGS в 30 строке заменяем оригинальные пути на специфичные для deb-based дистрибутивов:

-L/usr/lib/i386-linux-gnu/wine-development/ \
-L/usr/lib/i386-linux-gnu/ \
для Makefile и
-L/usr/lib/x86_64-linux-gnu/wine-development \
-L/usr/lib/x86_64-linux-gnu/ \
для Makefile64.

Скачиваем ASIO_SDK c https://www.steinberg.net/index.php?id=48&L=1, вытаскиваем оттуда asio.h и кидаем в каталог с исходниками.

Собираем и устанавливаем:

make -а Makefile
sudo cp wineasio.dll.so /usr/lib/i386-linux-gnu/wine-development
make clean
bash ./prepare_64bit_asio
make -a Makefile64
sudo cp wineasio.dll.so /usr/lib/x86_64-linux-gnu/wine-development

Исправляем некорректную линковку:

sudo ln -s /usr/lib/x86_64-linux-gnu/wine-development/libwine.so.1.0 /usr/lib/x86_64-linux-gnu/libwine.so.1
sudo ln -s /usr/lib/i386-linux-gnu/wine-development/libwine.so.1.0 /usr/lib/i386-linux-gnu/libwine.so.1
# на всякий
sudo ldconfig

Регистрируем dll-ки:

# 64-битную
WINEPREFIX=/path/to/prefix wine64 regsvr32 wineasio.dll
# 32-битную
WINEPREFIX=/path/to/prefix regsvr32 wineasio.dll

Ну вот как-то так.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от zezic

Оно и успользуется уже давно, просто под новым Debian никак не хотел собираться и работать. Reaper в основном, ну и по мелочи - Cubase для старых проектов, iZotope RX, Melodyne и всё такое.

meliafaro ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

В данном случае всё сложно из-за а) обязательной мультиархитектурности, б) из-за некоторых особенностей Debian, отличающих его от других дистрибутивов.

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