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 13.1.0». Да, я знаю, конечно, это был бы лучший план. Я знаю, что Asterisk 1.8 прошел EOL . Получение ресурса для переноса нашего плагина на Asterisk 13.1.0 - это то, что сдерживает нас.
На основе вывода от @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.
Как Bill Karwin ответил, это - проблема gcc. Но мне удалось создать Звездочку 1.8 только после добавления дополнительного флага для конфигурирования:
./configure CXX=g++-4.8 CC=gcc-4.8
Также дефисы примечания в значениях.
На 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
Я обнаружил, что это вызвано встроенной проблемой.
В include / asterisk / inline_api.h строка № 49:
измените это на:
Затем make будет передан.