1.场景
外呼平台升级对应的freeswitch模块时候,按照往常正确步骤操作;然后控制台启动freeswitch的时候
进入/freeswitch/bin下面;执行脚本:
./freeswitch
然后查看到fs控制台输出为:
2.问题处理
2.1 排查说明
1、freeswitch报加载mod_sofia失败,于是去freeswitch下的
freeswitch/conf/autoload_configs/去查看 modules.conf.xml,发现对应模块已经加载:
2.2 LD_LIBRARY_PATH说明
1、由于其他机器上相同包模块类似,并且加载运行后正常,由于所有包的加载读取是基于/etc/profile的临时环境变量的:
2、非常多的软件没有root权限安装会比较困难,主要就是因为各种系统库文件,也就是LD_LIBRARY_PATH
这个环境变量里面的文件。查看其它库文件目录:echo $LD_LIBRARY_PATH
里面一般可以看到七八个已经定义好的库文件搜索路径。
当执行函数动态链接.so时,如果此文件不在缺省目录下 /lib和/usr/lib,那么就需要指定环境变量LD_LIBRARY_PATH
假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式: LD_LIBRARY_PATH=NEWDIRS:$LD_LIBRARY_PATH
(newdirs是新的路径串), 实例如下;
export LD_LIBRARY_PATH=/export/apps/anaconda2/2.4.1/lib/:$LD_LIBRARY_PATH
3、需要找到系统的库文件地址
比如:我们有时候安装:liblzma时候,gcc编辑器找不到我们系统的liblzma这个库文件,就是我们的LD_LIBRARY_PATH定义的所有路径里面都没有这个liblzma这个库文件。
验证gcc编辑器能否找到指定库文件的方法是:
gcc -llzma --verbose
事实上,我们的机器肯定是有这个库文件的,只不过是不在LD_LIBRARY_PATH定义的所有路径里面,简单查找如下:
locate liblzma
/export/apps/anaconda2/2.4.1/lib/liblzma.a
/export/apps/anaconda2/2.4.1/lib/liblzma.la
/export/apps/anaconda2/2.4.1/lib/liblzma.so
/export/apps/anaconda2/2.4.1/lib/liblzma.so.5
/export/apps/anaconda2/2.4.1/lib/liblzma.so.5.0.5
为了解决我,我们需要添加:
export LD_LIBRARY_PATH=/export/apps/anaconda2/4.0.0/lib/:$LD_LIBRARY_PATH
export LIBRARY_PATH=/export/apps/anaconda2/4.0.0/lib/:$LIBRARY_PATH
4、为什么修改LD_LIBRARY_PATH?
因为运行时动态库的搜索路径的先后顺序是:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH
指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib和/usr/lib;
这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib和/usr/lib只有root权限才可以修改,而且配置文件/etc/ld.so.conf也是root的事情,我们只好对LD_LIBRARY_PATH
进行操作。
5、永久性添加
每次我使用该软件都需要临时修改库文件,因为上面的方法是临时设置环境变量 LD_LIBRARY_PATH ,重启或打开新的 Shell 之后,一切设置将不复存在。
为了让这种方法更完美一些,可以将该 LD_LIBRARY_PATH
的 export
语句写到系统文件中,例如 /etc/profile
、/etc/export
、~/.bashrc
或者 ~/.bash_profile
等等,取决于你正在使用的操作系统咯。
2.3查看设置的环境变量
通过以下命令:
echo $LD_LIBRARY_PATH
输出的:
发现环境变量出问题了,解决办法:
1、关闭当前窗口 重新执行echo $LD_LIBRARY_PATH
2、在当前窗口:将LD_LIBRARY_PATH环境变量设置为空,执行source,然后再设置为正确值即可。
按照步骤1修改后:
然后启动freeswitch,即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。