DLL Hell возможен не только в Windows
Не любят разработчики Ubuntu Skype… совсем не любят. Только-только нашлось решение после безумного обновления ia32-libs
, как через несколько дней возникла новая проблема: Skype (да и не только Skype) стал падать с сообщением об ошибке:
ALSA lib ../../../src/control/control.c:909:(snd_ctl_open_noupdate) Invalid CTL hw:0
Так как Skype — 32-битное приложение, а операционная система 64-битная, то понятно, почему попытка загрузить библиотеку не увенчалась успехом.
Тем не менее, "стандартное решение" (LDD_PATH=/usr/lib32 skype
) тоже не сработало.
К счастью, друзья подсказали, в чём дело. А я автоматизировал решение проблемы.
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
:
sudo ./fix-alsa.sh
Надеюсь, это кому-нибудь поможет.
/usr/bin/skype: 3: /usr/bin/skype.real: not found
хотя все файлы присутствуют.
Удалите Ваш и поставьте отсюда: http://www.skype.com/go/getskype-linux-ubuntu-amd64
Ни за что бы не подумал, что проблема до сих пор актуальна. Тем не менее, в Karmic Koala это так Нашел в Google свою же статью, и рецепт годичной давности помог
Доброе время суток:
Skype, Ubuntu 9.10, Karmic:
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 тоже не помогла.
Все пакеты, на которые происходит ругань, стоят…
Подскажите, если не жалко, в какую сторону копать?
Конечно не жалко.
Можно посмотреть на файлы:
/etc/ld.so.conf.d/alsa32.conf
;/etc/ld.so.conf.d/alsa64.conf
;/usr/share/alsa/pulse.conf
Почему - то не могу вставить содержимое файлов “по людски”, исспользуя code
“ОШИБКА: неверно сформированный запрос!”
Придется так:
/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
}
]
Ага, у меня получилось воспроизвести ошибку. Самый простой вариант — убить
/usr/share/alsa/pulse.conf
(в смысле, полностью его очистить).Сейчас посмотрю, какие есть альтернативы.
Полное решение:
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
. И отписаться о результатахСпасибо за помощь, расскажу всё по порядку:
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 то, “монопольно” звук работает.
Такое решение лучше, чем ничего, но, всё таки, не идеал
Ещё раз, спасибо за помощь ))
Уберите символическую ссылку, которую Вы создали, а затем:
# Предполагаем, что вы находитесь в каталоге с 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
и смотримВладимир, а подскажите, то, что скайп монопольно захватывает звук, это нормально, или он может делить звуковуху с другими процессами через pulse аудио?
Ваш способ от 00:02 дал такие же результаты, как и способ с симлинком. Ваш идеалогически более верный.
У меня ни разу не получилось заставить скайп заставить нормально через PulseAudio. У меня skype и всё остальное работают через разные устройства.
[...] год назад я писал об аналогичной проблеме со Skype в Ubuntu Intrepid Ibex. Воистину, история имеет тенденцию [...]