web-dev-qa-db-fra.com

Comment construire Asterisk 1.8 sur Xenial?

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:

  • Construisez Asterisk 1.8 en utilisant g ++ 5.3.1 et résolvez les erreurs de compilation.
  • Installez une ancienne version de g ++ sur Xenial (par exemple, je sais que g ++ 4.4.7 permet de compiler Asterisk 1.8 sur notre ancien système d’exploitation).
  • Une autre solution pour construire une version d’Asterisk qui fonctionnera sous Xenial. Peut-être construire sur Ubuntu 14.04 et mettre à niveau les fichiers binaires? Je m'attendrais à avoir des conflits de version de bibliothèque.

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.

3
Bill Karwin

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.

2
Bill Karwin

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.

1

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
0
Max Hofmann