将 Asterisk 升级到 14 时出错 - PJSIP 未声明

Error while upgrading Asterisk to 14 - PJSIP undeclared

我正在尝试将 Debian (8.7) 上的 asterisk 11 升级到 14,但在进行安装时出现以下错误。

报错如下

res_pjsip_transport_management.c: In function ‘monitored_transport_state_callback’:
res_pjsip_transport_management.c:190:8: error: ‘PJSIP_TP_STATE_SHUTDOWN’ undeclared (first use in this function)
   case PJSIP_TP_STATE_SHUTDOWN:
        ^
res_pjsip_transport_management.c:190:8: note: each undeclared identifier is reported only once for each function it appears in
/root/asterisk-14.3.0/Makefile.rules:149: recipe for target 'res_pjsip_transport_management.o' failed
make[1]: *** [res_pjsip_transport_management.o] Error 1
Makefile:401: recipe for target 'res' failed
make: *** [res] Error 2

我使用的命令如下

tar -zxvf asterisk-14-current.tar.gz
/etc/init.d/asterisk stop
cd asterisk-14.3.0/
./configure
rm -f /usr/lib/asterisk/modules/*
make install

我尝试了一些来自互联网的解决方案,但没有解决....

pjsip 版本不匹配。

从未尝试过 14*(它不是 LTS),因为 13.* 这样的错误意味着你有不止一个 pjsip 或 pjsip 不是 2.4。

在重建 pjsip 之前做检查

yum remove -y pjsip
rm -f `find / -name *pjsip*`

似乎 pjsip 版本不匹配(可能是安装了不止一个版本)所以您想删除所有 previous/existing 版本的 PJSip。如果您不知道哪些包属于 pjsip,您可以通过以下方式搜索它们:

apt-cache search pjsip

dpkg -l | grep pj

一旦您知道要删除哪个包,请执行

apt-get --purge remove <package name>

然后您要下载最新版本的 pjsip(根据 Asterisk 网站,当前版本为 2.6)

wget wget http://www.pjsip.org/release/2.6/pjproject-2.6.tar.bz2
tar -xjvf pjproject-2.6.tar.bz2

您想将 pjproject 放在 /usr/local 中。

cp -R pjproject-2.6 /usr/local/

完成后,您必须 build/compile/install pjproject 和

./configure --prefix=/usr --enable-shared CFLAGS='-O2 -DNDEBUG' //Various options (enable/disable) can be put in here. Please refer to manual 
make dep
make
make install
ldconfig

确认pjproject已经安装到目标位置

ldconfig -p | grep pj

完成此操作后,您现在可以转到 Asterisk 文件夹并发出

./configure 

然后继续安装 :)

如果我没记错的话,Asterisk 13 源代码附带了一个 built-in pjproject,但是 14 会在系统上寻找已安装的 pjproject。

确保安装了它(包括 -dev 或 -devel 包,其中包含 headers),然后尝试重新配置 asterisk 源。

./bootstrap.sh
./configure
make menuconfig