Как собрать Asterisk 1.8 на Xenial?

Asterisk 13.1.0 доступна в репозиториях для Xenial.

Но я поддерживаю приложение, которому требуется Asterisk 1.8 LTS, потому что мы используем собственный плагин. Нам нужно продолжать использовать Asterisk 1.8 и собирать его из исходного кода, пока мы не сможем перенести наш плагин на более новую версию Asterisk.

Однако, похоже, что Asterisk 1.8 не может быть собран с версией g ++, доступной в Xenial, то есть 5.3.1. Я получаю массу предупреждений, которые можно заставить замолчать, а также множество фатальных ошибок, связанных с символами-дубликатами, и, возможно, других фатальных ошибок, даже если я смог их устранить.

Пример:

iax2-parser.o: In function `ast_atomic_fetchadd_int':
asterisk-1.8/include/asterisk/lock.h:600: multiple definition of `ast_atomic_fetchadd_int'
chan_iax2.o:asterisk-1.8/include/asterisk/lock.h:600: first defined here
iax2-parser.o: In function `ast_atomic_dec_and_test':
asterisk-1.8/include/asterisk/lock.h:646: multiple definition of `ast_atomic_dec_and_test'
chan_iax2.o:asterisk-1.8/include/asterisk/lock.h:646: first defined here
...etc...

Я читал другие посты от людей, борющихся с этим, и я пытался использовать опции компилятора, чтобы обойти это безуспешно.

У меня вопрос: есть ли какое-нибудь решение для выполнения одного из следующих действий:

  • Сборка Asterisk 1.8 с использованием g ++ 5.3.1 и устранение ошибок компиляции.
  • Установите старую версию g ++ на Xenial (например, я знаю, что g ++ 4.4.7 работает для компиляции Asterisk 1.8 на нашей старой ОС).
  • Некоторое другое решение для создания версии Asterisk, которая будет работать на Xenial. Возможно, построить на Ubuntu 14.04 и запаковать бинарные файлы? Я ожидаю получить конфликт версий библиотеки.

Некоторые люди будут вспыльчивы и скажут: «Вам действительно нужно просто перейти на Asterisk 13.1.0». Да, я знаю, конечно, это был бы лучший план. Я знаю, что Asterisk 1.8 прошел EOL . Получение ресурса для переноса нашего плагина на Asterisk 13.1.0 - это то, что сдерживает нас.

3
задан 8 June 2016 в 12:14

4 ответа

На основе вывода от @steeldriver я узнал, что Ubuntu 16.04 имеет пакет в своем стандарте repo для gcc-4.8 и g++-4.8. Я установил g ++ и несколько других пакетов, необходимых для создания Звездочки 1.8:

apt-get install g++-4.8 libcurl4-openssl-dev libncurses5-dev libxml2-dev

Это устанавливает g++4.8 как отличный двоичный файл от g++ версия 5.3.1, которая также установлена. Я просто должен настроить сборку Звездочки для использования g++4.8, и сборка:

./configure CXX=g++4.8
make -j4
make install

И эврика! Это работало! Я создал эту устаревшую версию Звездочки 1.8 на Ubuntu 16.04.

2
ответ дан 8 June 2016 в 12:14

Как Bill Karwin ответил, это - проблема gcc. Но мне удалось создать Звездочку 1.8 только после добавления дополнительного флага для конфигурирования:

./configure CXX=g++-4.8 CC=gcc-4.8

Также дефисы примечания в значениях.

1
ответ дан 8 June 2016 в 12:14

На Ubuntu 18.04:

sudo apt install g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 1`  
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 1`  

Для tcptls:

sudo apt install libssl1.0-dev`

./configure 
make menuselect
make
0
ответ дан 29 September 2019 в 13:35

Я обнаружил, что это вызвано встроенной проблемой.

В include / asterisk / inline_api.h строка № 49:

определить AST_INLINE_API (hdr, body) hdr; extern inline hdr body

измените это на:

define AST_INLINE_API (hdr, body) hdr;

Затем make будет передан.

1
ответ дан 26 December 2019 в 13:21

Другие вопросы по тегам:

Похожие вопросы: