[devel] libalsa (FAILED mplayer.git=1.0-alt35.29311.1)
Sergey Vlasov
vsu на altlinux.ru
Вс Май 17 19:20:03 MSD 2009
On Sun, May 17, 2009 at 06:07:08PM +0400, Sergey Vlasov wrote:
> On Sun, May 17, 2009 at 10:12:09AM +0400, Alexey Tourbin wrote:
> > После обновления libalsa что-то сломалось в symbol versioning.
> >
> > [at на altair ~]$ rpmpeek /ALT/archive/Sisyphus/2009/05/01/files/x86_64/RPMS/libalsa-1.0.19-alt1.x86_64.rpm readelf -aW ./usr/lib64/libasound.so.2 |grep -w snd_pcm_hw_params_get_channels
> > 231: 00000000000519d0 31 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels на ALSA_0.9
> > 233: 00000000000519c0 15 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4
> > [at на altair ~]$ rpmpeek /ALT/Sisyphus/files/x86_64/RPMS/libalsa-1.0.20-alt1.x86_64.rpm readelf -aW ./usr/lib64/libasound.so.2 |grep -w snd_pcm_hw_params_get_channels
> > 493: 0000000000051080 15 FUNC WEAK DEFAULT 12 snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4
> > [at на altair ~]$
> >
> > Похоже, что это связано не с изменениями в libalsa, а с изменениями
> > в binutils.
>
> Скорее как раз в libalsa или libtool:
>
> http://git.altlinux.org/tasks/6474/build/1/x86_64/log
>
> checking for versioned symbols... grep: libtool: No such file or directory
> ./configure: line 12212: test: too many arguments
> ./configure: line 12215: test: -gt: unary operator expected
> broken libtool - use libtool v1.4+; no versions
На самом деле там несколько ошибок, одна из которых (сломавшаяся
проверка версии libtool) вызвала проявление второй (неверная
информация в Versions.in).
Проверка в configure.in сейчас выглядит следующим образом:
dnl Check for versioned symbols
AC_MSG_CHECKING(for versioned symbols)
AC_ARG_WITH(versioned,
AS_HELP_STRING([--with-versioned],
[shared library will be compiled with versioned symbols (default = yes)]),
versioned="$withval", versioned="yes")
if test "$versioned" = "yes"; then
# it seems that GNU ld versions since 2.10 are not broken
xres=$macro_version
major=`echo $xres | cut -d . -f 1`
minor=`echo $xres | cut -d . -f 2`
pass=0
if test $major -eq 1 -a $minor -gt 3; then
pass=1
else
if test $major -gt 1; then
pass=1
fi
fi
if test $pass -eq 1; then
AC_DEFINE(VERSIONED_SYMBOLS,,[compiled with versioned symbols])
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(broken libtool - use libtool v1.4+; no versions)
fi
else
AC_MSG_RESULT(no)
fi
AM_CONDITIONAL(VERSIONED_SYMBOLS, test x$versioned = xyes)
(раньше xres=... был другой, там и происходили ошибки). При этом,
если тест версии libtool не проходил, получалось, что
AC_DEFINE(VERSIONED_SYMBOLS) не определялся, но на
AM_CONDITIONAL(VERSIONED_SYMBOLS) это не влияло; в результате в
src/Makefile.am в любом случае ставилось
VSYMS = -Wl,--version-script=Versions
При отсутствии AC_DEFINE(VERSIONED_SYMBOLS) в коде libalsa версии
символов не назначаются при компиляции (см. include/alsa-symbols.h), в
этом случае для каждого символа может существовать только одна версия,
которая назначается в файле src/Versions.in при сборке разделяемой
библиотеки. Однако для некоторых символов snd_pcm_sw_params_* (список
в src/pcm/pcm.c, для них используется макрос OBSOLETE1) в
src/Versions.in не прописана версия ALSA_0.9.0rc4, в результате при
такой сборке для них по умолчанию назначается версия ALSA_0.9, что
неправильно. Других изменений в ABI существовавших ранее функций в
libalsa не было (только добавления новых функций), поэтому, если бы не
эта ошибка в Versions.in, сборка без поддержки symbol versioning никак
бы не проявилась (перестали бы работать только очень старые бинарники,
собранные с древними версиями libalsa до 0.9.0rc4). В нормальной
ситуации эта ошибка не проявляется, поскольку версии назначаются при
компиляции через asm(".symver ...").
Пересобирать бинарники, собранные с неправильной версией libalsa,
необходимо, иначе при вызовах функций snd_pcm_sw_params_*, для которых
была установлена неправильная версия, они будут падать.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 197 байтов
Описание: Digital signature
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20090517/6e555184/attachment.bin>
Подробная информация о списке рассылки Devel