Asterisk: Declining to load module chan_sip.so due to unresolved symbols
- Критическая ошибка:
ERROR: loader.c: Declining to load module 'chan_sip.so' due to unresolved symbols. - Asterisk не загружает SIP драйвер, каналы SIP становятся недоступны.
- Команда
sip show peersвозвращаетNo such command. - Сбой возникает после обновления пакетов Asterisk или компиляции кастомных модулей.
1. Проверка отсутствующих динамических символов
Запустите проверку связывания разделяемой библиотеки через ldd:
ldd -r /usr/lib/asterisk/modules/chan_sip.soВ выводе будут указаны неопределенные функции (undefined symbol), например ast_ssl_init или ast_crypto_loaded.
2. Проверка порядка загрузки зависимых модулей в modules.conf
Отредактируйте /etc/asterisk/modules.conf, чтобы предварительно загрузить криптографические и вспомогательные библиотеки ядра:
[modules]
autoload = yes
; Обязательная предварительная загрузка базовых модулей
preload => res_crypto.so
preload => res_http_websocket.so
preload => res_pjproject.so
; Загрузка драйверов
load => chan_sip.so3. Пересборка Asterisk из исходного кода при конфликте ABI
Если ядро было обновлено, пересоберите модули с актуальными заголовочными файлами:
cd /usr/src/asterisk-*
make distclean
./configure --with-ssl --with-crypto
make menuselect.makeopts
menuselect/menuselect --enable chan_sip menuselect.makeopts
make -j$(nproc)
make install4. Миграция на современный стек chan_pjsip (Рекомендуется)
В Asterisk 21+ драйвер chan_sip полностью удален из кодовой базы. Переходите на res_pjsip:
# Отключение устаревшего модуля в modules.conf
noload => chan_sip.so
load => chan_pjsip.so
load => res_pjsip.so Частые вопросы (FAQ)
Что вызывает ошибку 'unresolved symbols' при загрузке модуля?
Несоответствие ABI между ядром Asterisk и скомпилированным бинарником .so, отсутствие предварительно загруженного модуля-зависимости (например res_crypto.so), или изменение версий системных библиотек OpenSSL/libxml2.
Почему chan_sip.so не собирается в новых версиях Asterisk?
Драйвер chan_sip признан устаревшим (deprecated) в Asterisk 17, отключен по умолчанию в Asterisk 19 и полностью удален из состава Asterisk начиная с версии 21.
Как загрузить модуль вручную из командной строки для теста?
Выполните в CLI команду: module load chan_sip.so и изучите детальный вывод причины отказа.
Что делать, если ldd показывает missing libssl.so.1.1?
Установите совместимую версию OpenSSL или переконфигурируйте и пересоберите Asterisk с текущей системной версией libssl.so.3.