Como construir o Asterisk 1.8 no Xenial?

3

O Asterisk 13.1.0 está disponível nos repositórios do Xenial.

Mas estou apoiando um aplicativo que precisa do Asterisk 1.8 LTS, porque usamos um plug-in personalizado. Precisamos continuar usando o Asterisk 1.8 e construí-lo a partir da fonte até que possamos levar nosso plugin para a nova versão do Asterisk.

No entanto, parece que o Asterisk 1.8 não pode ser construído com a versão do g ++ disponível no Xenial, que é 5.3.1. Recebo uma tonelada de avisos, que podem ser silenciados, mas também muitos erros fatais sobre símbolos definidos duplicados e, possivelmente, outros erros fatais, mesmo que eu possa resolvê-los.

Exemplo:

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...

Eu tenho lido outras postagens de pessoas que estão lidando com isso, e tenho tentado usar as opções do compilador para contornar isso sem sucesso.

A minha pergunta é se existe alguma solução para fazer o seguinte:

  • Crie o Asterisk 1.8 usando g ++ 5.3.1 e resolva os erros de compilação.
  • Instale uma versão antiga do g ++ no Xenial (por exemplo, eu sei que o g ++ 4.4.7 funciona para compilar o Asterisk 1.8 em nosso sistema operacional antigo).
  • Alguma outra solução para criar uma versão do Asterisk que será executada no Xenial. Talvez construir no Ubuntu 14.04 e distribuir os binários? Eu esperaria obter conflitos de versão da biblioteca.

Algumas pessoas ficarão indecisas e dirão: "você deveria apenas atualizar para o Asterisk 13.1.0." Sim, eu sei, claro, que seria um plano melhor. Eu sei que o Asterisk 1.8 tem passado seu EOL . Conseguir um recurso para portar nosso plugin para o Asterisk 13.1.0 é o que está nos impedindo.

    
por Bill Karwin 08.06.2016 / 01:14

2 respostas

2

Com base na liderança do @steeldriver, aprendi que o Ubuntu 16.04 tem um pacote em seu repositório padrão para gcc-4.8 e g++-4.8 . Eu instalei o g ++ e alguns outros pacotes necessários para construir o Asterisk 1.8:

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

Isso instala g++4.8 como um binário distinto de g++ versão 5.3.1, que também é instalado. Eu só preciso configurar o build do Asterisk para usar g++4.8 e build:

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

E eureka! Funcionou! Eu construí esta versão desatualizada do Asterisk 1.8 no Ubuntu 16.04.

    
por Bill Karwin 08.06.2016 / 06:23
2

Como Bill Karwin respondeu, é uma questão do gcc. Mas eu consegui construir o Asterisk 1.8 somente depois de adicionar um sinalizador extra para configurar:

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

Observe também os hífens nos valores.

    
por Alexander Svetkin 15.05.2017 / 19:58

Tags