Asterisk 13.1.0 est disponible dans le dépôt pour Xenial.
Mais je supporte une application nécessitant Asterisk 1.8 LTS, car nous utilisons un plugin personnalisé. Nous devons continuer à utiliser Asterisk 1.8 et à le compiler à partir des sources jusqu'à ce que nous puissions transférer notre plug-in vers la version plus récente d'Asterisk.
Cependant, il semble qu'Asterisk 1.8 ne puisse pas être construit avec la version de g ++ disponible sur Xenial, qui est 5.3.1. Je reçois une tonne d'avertissements, qui peuvent être réduits au silence, mais également de nombreuses erreurs fatales à propos des symboles définis en double, et éventuellement d'autres erreurs fatales, même si je pouvais les résoudre.
Exemple:
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...
J'ai lu d'autres articles de personnes aux prises avec ce problème et j'ai essayé d'utiliser les options du compilateur pour y remédier sans succès.
Ma question est de savoir s'il existe une solution pour l'une des actions suivantes:
Certaines personnes seront désinvoltes et diront: "vous devriez vraiment simplement passer à Asterisk 13.1.0". Oui, je sais bien sûr que ce serait un meilleur plan. Je sais qu'Asterisk 1.8 a réussi son EOL . Obtenir une ressource pour porter notre plugin sur Asterisk 13.1.0 est ce qui nous retient.
Basé sur l'exemple de @steeldriver, j'ai appris qu'Ubuntu 16.04 avait un paquet dans son référentiel standard pour gcc-4.8
et g++-4.8
. J'ai installé g ++ et quelques autres packages nécessaires à la construction d'Asterisk 1.8:
apt-get install g++-4.8 libcurl4-openssl-dev libncurses5-dev libxml2-dev
Ceci installe g++4.8
comme un binaire distinct de g++
version 5.3.1, qui est également installée. Je dois juste configurer la construction Asterisk pour utiliser g++4.8
, et construire:
./configure CXX=g++4.8
make -j4
make install
Et eureka! Ça a marché! J'ai construit cette version obsolète d'Asterisk 1.8 sur Ubuntu 16.04.
Comme Bill Karwin a répondu, c'est une question de gcc. Mais je n'ai réussi à compiler Asterisk 1.8 qu'après avoir ajouté un indicateur supplémentaire à configurer:
./configure CXX=g++-4.8 CC=gcc-4.8
Notez également les traits d'union dans les valeurs.
Sur 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`
Pour les tcptls:
Sudo apt install libssl1.0-dev`
./configure
make menuselect
make