LINUX.ORG.RU

сборка x86_64 пакета при установленном multilib (compat32)

 , ,


0

1

Всех приветствую.

Понадобилось тут установить по зависимостям богопротивный gtkglext. Все хорошо, но в конце, при линковке пытается слинковаться с версиями 32-разрядной библиотеки:

/usr/lib/libpng16.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status

Сначала он ругнулся на libXext, я удалил libXext-compat32-1.3.3-x86_64-2compat32
потом он ругнулся на libX11, я удалил libX11-compat32-1.6.4-x86_64-1compat32
потом expat, freetype... и вот на libpng16 я сломался. Какое заклинание нужно, чтобы при сборке 64-разрядной библы оно не лезло в 32 бита?

Cобираю так: ./configure --prefix=/usr --libdir=/usr/lib64 --disable-static --enable-gtk-doc --enable-debug=no --build=x86_64-slackware-linux

система: Slackware64_14.2

Никогда такого не было и вот опять.

★★★★★

В качестве быстрого и грязного фикса уже собранное и опакеченное:
https://slackonly.com/pub/packages/14.2-x86_64/libraries/pangox-compat/pangox...
https://slackonly.com/pub/packages/14.2-x86_64/libraries/gtkglext/gtkglext-1....

Дело такое, что в некоторых дистрибутивах 64-битные библиотеки лежат в /usr/lib, а некоторые пользователи таких дистрибутивов при разработке софта зачем-то хардкодят этот путь...
Прямое решение — патчить сборку — может быть длинным и тернистым.
Варианты обхода — взять уже собранное кем-то, либо собирать в не-мультилибном chroot-е или отдельной не-мультилибной системе — могут оказаться много проще.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)

--libdir=/usr/lib64

Возможно ты думаешь, что это указывает путь к библиотекам, но на самом деле нет, это указывает, куда устанавливать собранные данным пакетом библиотеки

а указать пусть к директории с правильными библиотеками можно явно

./configure --prefix=/usr --libdir=/usr/lib64 --disable-static --enable-gtk-doc --enable-debug=no --build=x86_64-slackware-linux LDFLAGS="-L/usr/lib64"

Harald ★★★★★
()

Кстати, не могло так случиться, что на
/etc/profile.d/32dev.sh
установлен бит исполнения?

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

Кстати, не могло так случиться, что на
/etc/profile.d/32dev.sh установлен бит исполнения?

хм. никогда не знал что у меня есть такие файлы. Проверил: 32dev.* не исполняемые. А если еще скажете для чего нужны эти файлы, цены вам не будет.

yax123 ★★★★★
() автор топика
Последнее исправление: yax123 (всего исправлений: 1)
Ответ на: комментарий от Harald

но скорей всего правильнее будет задать PKG_CONFIG_PATH с правильным префиксом для 64битных либ

PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig

ничего криминального не видно.

Вариант с LDFLAGS="-L/usr/lib64" помог.

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

отзываю подтверждение успеха. Руками собрал вроде успешно. А когда в слакбилд добавил правило ругнулось на: ../../../gtk/.libs/libgtkglext-x11-1.0.so: undefined reference to `GTK_WIDGET_REALIZED' ../../../gtk/.libs/libgtkglext-x11-1.0.so: undefined reference to `GTK_WIDGET_TOPLEVEL'

пришлось скачать готовый пакет.

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

А если еще скажете для чего нужны эти файлы, цены вам не будет

http://docs.slackware.com/slackware:multilib
http://docs.slackware.com/ru:slackware:multilib


Пакет «compat32-tools» требует некоторых пояснений.
Прочтите подробный файл «README» в каталоге /usr/doc/compat32-tools-*/, он станет хорошим подспорьем. Пакет устанавливает три полезных сценария:

/etc/profile.d/32dev.sh
Это тот же сценарий, что и в Slamd64. Он перенастраивает переменные окружения для облегчения компиляции 32-битных программ (путем установки предпочтений 32-битному компилятору и библиотекам перед 64-битными версиями)


Есть смысл почитать статью целиком ;)

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

спасибо, это я читал, даже про перенастройку переменных помню, только вот не заметил название скрипта отвечающего за это /etc/profile.d/32dev.sh

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123
../../../gtk/.libs/libgtkglext-x11-1.0.so: undefined reference to `GTK_WIDGET_REALIZED' 
../../../gtk/.libs/libgtkglext-x11-1.0.so: undefined reference to `GTK_WIDGET_TOPLEVEL'


Это другая проблема.

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

На не-мультилибной 14.2 собирается без проблем.

когда в слакбилд добавил правило

Примерно так:

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
LDFLAGS="-L/usr/lib64" \
./configure \

или как-то иначе?
Не должна сборка руками в одних и тех же условиях отличаться от пакетной сборки...

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

Сначала я попробовал пересобрать из исходников руками и вроде как удалось (собралось без явных ошибок). Потом залез в скрипт и добавил строку: LDFLAGS="-L/usr/lib64" \ На библы уже не ругалось, но не смог распознать вышеуказанные символы. Немного «погуглил», предлагают откатить версии gtk-шных библиотек. Тут я не вытерпел надругательства и скачал готовый пакет. Честно, говоря разбираться уже лениво. Мне не сама эта библа нужна.

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