DLL Hell возможен не только в Windows

Не любят разработчики Ubuntu Skype… совсем не любят. Только-только нашлось решение после безумного обновления ia32-libs, как через несколько дней возникла новая проблема: Skype (да и не только Skype) стал падать с сообщением об ошибке:

[-]
View Code (Unknown Language)
ALSA lib ../../src/conf.c:2700:(snd_config_hooks_call) Cannot open shared library /usr/lib/alsa-lib/libasound_module_conf_pulse.so
ALSA lib ../../../src/control/control.c:909:(snd_ctl_open_noupdate) Invalid CTL hw:0

Так как Skype — 32-битное приложение, а операционная система 64-битная, то понятно, почему попытка загрузить библиотеку не увенчалась успехом.

Тем не менее, "стандартное решение" (LDD_PATH=/usr/lib32 skype) тоже не сработало.

К счастью, друзья подсказали, в чём дело. А я автоматизировал решение проблемы.

[-]
Download fix-alsa.sh
#! /bin/sh

echo /usr/lib32/alsa-lib > /etc/ld.so.conf.d/alsa32.conf
echo /usr/lib/alsa-lib > /etc/ld.so.conf.d/alsa64.conf
ldconfig
sed -i 's/\/usr\/lib\/alsa-lib\/libasound_module_conf_pulse.so/libasound_module_conf_pulse.so/g' /usr/share/alsa/pulse.conf

Перед выполнением скрипта я бы порекомендовал сделать резервную копию файлов /etc/ld.so.conf.d/alsa32.conf, /etc/ld.so.conf.d/alsa64.conf и /usr/share/alsa/pulse.conf. На всякий случай.

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

[-]
View Code Bash
chmod 0755 fix-alsa.sh
sudo ./fix-alsa.sh

Надеюсь, это кому-нибудь поможет.

Добавить в закладки

Связанные записи

26
Сен
2008

Комментарии к статье «Возвращаем Skype к жизни в Ubuntu Intrepid Ibex на 64-битной платформе» (13)  »

  1. Михаил says:

    /usr/bin/skype: 3: /usr/bin/skype.real: not found

    хотя все файлы присутствуют.

  2. Vladimir says:

    Ни за что бы не подумал, что проблема до сих пор актуальна. Тем не менее, в Karmic Koala это так Нашел в Google свою же статью, и рецепт годичной давности помог :-)

  3. alakond says:

    Доброе время суток:
    Skype, Ubuntu 9.10, Karmic:

    [-]
    View Code Text
    skype                                                                                                 [23:57:15]134
    Gtk-Message: Failed to load module "canberra-gtk-module": /usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so: wrong ELF class: ELFCLASS64
    Gtk-Message: Failed to load module "gail": /usr/lib/gtk-2.0/modules/libgail.so: wrong ELF class: ELFCLASS64
    Gtk-Message: Failed to load module "atk-bridge": /usr/lib/gtk-2.0/modules/libatk-bridge.so: wrong ELF class: ELFCLASS64
    Gtk-Message: Failed to load module "gail": /usr/lib/gtk-2.0/modules/libgail.so: wrong ELF class: ELFCLASS64
    Gtk-Message: Failed to load module "atk-bridge": /usr/lib/gtk-2.0/modules/libatk-bridge.so: wrong ELF class: ELFCLASS64
    ALSA lib ../../src/conf.c:2700:(snd_config_hooks_call) Cannot open shared library libasound_module_conf_pulse.so
    ALSA lib ../../../src/control/control.c:909:(snd_ctl_open_noupdate) Invalid CTL hw:0
    zsh: abort (core dumped)  skype

    Ваш скрипт не помог, ссылка, на пакет amd64 тоже не помогла.
    Все пакеты, на которые происходит ругань, стоят…
    Подскажите, если не жалко, в какую сторону копать?

    • Vladimir says:

      Конечно не жалко.

      Можно посмотреть на файлы:

      • /etc/ld.so.conf.d/alsa32.conf;
      • /etc/ld.so.conf.d/alsa64.conf;
      • /usr/share/alsa/pulse.conf
      • alakond says:

        Почему - то не могу вставить содержимое файлов “по людски”, исспользуя code
        “ОШИБКА: неверно сформированный запрос!”
        Придется так:

        [-]
        View Code Text
        mapk-v ~ $cat /etc/ld.so.conf.d/alsa32.conf                                                                                  [0:35:57]134
        /usr/lib32/alsa-lib
        mapk-v ~ $cat /etc/ld.so.conf.d/alsa64.conf                                                                                    [0:37:14]0
        /usr/lib/alsa-lib
        mapk-v ~ $cat /usr/share/alsa/pulse.conf                                                                                       [0:37:23]0
        # PulseAudio alsa plugin configuration file to set the pulseaudio plugin as
        # default output for applications using alsa when pulseaudio is running.
        hook_func.pulse_load_if_running {
            lib "libasound_module_conf_pulse.so"
            func "conf_pulse_hook_load_if_running"
        }

        @hooks [
            {
                func pulse_load_if_running
                files [
                    "/usr/share/alsa/pulse-alsa.conf"
                    "/etc/asound.conf"
                    "~/.asoundrc"
                ]
                errors false
            }
        ]
        • Vladimir says:

          Ага, у меня получилось воспроизвести ошибку. Самый простой вариант — убить /usr/share/alsa/pulse.conf (в смысле, полностью его очистить).

          Сейчас посмотрю, какие есть альтернативы.

        • Vladimir says:

          Полное решение:

          [-]
          View Code Bash
          sudo -i
          rm -f /etc/ld.so.conf.d/alsa32.conf /etc/ld.so.conf.d/alsa64.conf
          mkdir tmp && cd tmp
          wget http://ua.archive.ubuntu.com/ubuntu/pool/universe/i/ia32-libs/ia32-libs_2.7ubuntu6_amd64.deb
          ar x ia32-libs_2.7ubuntu6_amd64.deb
          lzma -d data.tar.lzma
          tar xf data.tar ./usr/lib32/alsa-lib/libasound_module_conf_pulse.so
          cp ./usr/lib32/alsa-lib/libasound_module_conf_pulse.so /usr/lib32/alsa-lib/
          ldconfig
          exit

          После чего запустить skype. И отписаться о результатах :-)

          • alakond says:

            Спасибо за помощь, расскажу всё по порядку:
            1. Решение с очисткой /usr/share/alsa/pulse.conf помогло. Захотелось ещё лучшего, и я перешел к пункту 2 :)

            2. вернул оригинальный /usr/share/alsa/pulse.conf, и запустил написанный више скрипт. Скайп запускается, но “проблемы с воспроизведением звука”
            В консоли это выглядит так:

            ALSA lib ../../../src/control/control.c:874:(snd_ctl_open_conf) Cannot open shared library /usr/lib32/alsa-lib/libasound_module_ctl_pulse.so

            Ну, что же, тогда:

            ln /usr/lib32/alsa-lib/libasound_module_conf_pulse.so /usr/lib32/alsa-lib/libasound_module_ctl_pulse.so

            И снова запускаем скайп:
            ALSA lib ../../src/dlmisc.c:118:(snd_dlsym_verify) unable to verify version for symbol _snd_ctl_pulse_open
            ALSA lib ../../../src/control/control.c:877:(snd_ctl_open_conf) symbol _snd_ctl_pulse_open is not defined inside /usr/lib32/alsa-lib/libasound_module_ctl_pulse.so

            И, вот что-то тут я застрял :)
            Но, если в качестве “устройств” в самом скайпе указывать hw:intel,0 то, “монопольно” звук работает.

            Такое решение лучше, чем ничего, но, всё таки, не идеал :)
            Ещё раз, спасибо за помощь ))

          • Vladimir says:

            Уберите символическую ссылку, которую Вы создали, а затем:

            [-]
            View Code Bash
            sudo -i
            # Предполагаем, что вы находитесь в каталоге с data.tar из ia32-libs_2.7ubuntu6_amd64.deb
            tar xf data.tar ./usr/lib32/alsa-lib/libasound_module_ctl_pulse.so
            cp ./usr/lib32/alsa-lib/libasound_module_ctl_pulse.so /usr/lib32/alsa-lib/
            ldconfig

            Потом запускаем skype и смотрим :-)

          • alakond says:

            Владимир, а подскажите, то, что скайп монопольно захватывает звук, это нормально, или он может делить звуковуху с другими процессами через pulse аудио?
            Ваш способ от 00:02 дал такие же результаты, как и способ с симлинком. Ваш идеалогически более верный.

          • Vladimir says:

            У меня ни разу не получилось заставить скайп заставить нормально через PulseAudio. У меня skype и всё остальное работают через разные устройства.

  4. [...] год назад я писал об аналогичной проблеме со Skype в Ubuntu Intrepid Ibex. Воистину, история имеет тенденцию [...]

Подписаться на RSS-ленту комментариев к статье «Возвращаем Skype к жизни в Ubuntu Intrepid Ibex на 64-битной платформе» Trackback URL: http://blog.sjinks.org.ua/linux/345-bringing-skype-back-in-ubuntu-intrepid-ibex-64-bit/trackback/

Оставить комментарий к записи «Возвращаем Skype к жизни в Ubuntu Intrepid Ibex на 64-битной платформе»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя