解决linux下部署科大讯飞时的版本过低问题

Posted 黑色de四叶草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决linux下部署科大讯飞时的版本过低问题相关的知识,希望对你有一定的参考价值。

在将项目部
技术分享
 
技术分享
 
技术分享
署到阿里云服务器之后,需要将科大讯飞SDK下的libmsc64.so依赖库文件上传至/usr/java/jdk1.8.0_121/jre/lib/amd64路径下
 
在Windows下(Eclipse里直接运行Tomcat)调用语音转文字接口没问题,但部署到阿里云Linux上后,只要调用语音转文字接口就会报错,报错代码如下:
技术分享
一开始从上图红框中的地方找原因,走了很多弯路,后面看下面的错误代码,终于找到方向如下图
技术分享
然后开始注意到GLIBC_2.15 not found,阅读该博客后http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=9864  基本锁定是由于系统glibc版本低于2.15导致
博客重点内容如下:
Q1:集成sdk后运行,出现java.lang.Unsatisfie.lang.UnsatisfiedLinkError no injava.library.path,或报20021的错误?
A:Java SDK 使用了 JNI 形式,在初始化 SDK 时,SDK 将加载共享库(Windows下为msc32.dll或msc64.dll文件,Linux下libmsc32.so或libmsc64.so文件),报错是因为系统找不到共享库。
一般来说,在 Windows 下,系统加载共享库时的优先级将按以下的顺序:
1,应用的当前运行目录;
2,由系统环境参数 Path 指定的目录;
3,System32 目录;
而在Linux下,系统加载共享库时的优先级将按以下顺序:
1,LD_LIBRARY_PATH指定的目录;
2,/lib/ 和 /lib64/ 目录;
根据上面:
在Windows下,把 dll 文件,放在应用的当前运行目录(一般为应用所在的目录),或在 Path 把 dll 所在目录加入此环境参数中,或者把dll复制到 System32 目录(不建议);
在Linux下,则把 .so 所在目录,通过 export 加入 LD_LIBRARY_PATH 中(在Terminal或在“.bashrc”等启动时会加载的脚本中),或把 .so 文件复制到 lib 文件夹中(不建议);(另外,确保linux的glibc版本为2.11以上;可以执行命令 ldd  libmsc32.so <如64位系统,则命令为 ldd libmsc64.so>,如果有执行结果有`GLIBC_2.11‘ not found,则需要把 glibc 版本升级到2.11版)
 
 
升级Linux系统glibc版本到2.15(参考 http://blog.csdn.net/officercat/article/details/39520227
各个版本的glibc可以从http://ftp.gnu.org/gnu/glibc/找,包括其插件glibc-port
2  tar -xvf  glibc-2.15.tar.gz
3  tar -xvf  glibc-ports-2.15.tar.gz
4  mv glibc-ports-2.15 glibc-2.15/ports 
5  mkdir glibc-build-2.15
6  cd glibc-build-2.15 
../glibc-2.15/configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
8  make (此过程时间比较长)
9  make install (此过程时间比较长)
10 $ strings /lib64/libc.so.6 | grep GLIBC 成功后查看 

以上是关于解决linux下部署科大讯飞时的版本过低问题的主要内容,如果未能解决你的问题,请参考以下文章

6.24-AppCan移动开发大会倒计时科大讯飞来了!

golang 使用科大讯飞进行语音合成与识别

2021WAIC科大讯飞总裁吴晓如:未来人工智能将更好地造福每一个人

科大讯飞语音合成Vue版教程

在C#中使用科大讯飞Web API进行语音合成

使用科大飞讯语音合成报 20021 引擎错误