解决linux下部署科大讯飞时的版本过低问题
在将项目部
署到阿里云服务器之后,需要将科大讯飞SDK下的libmsc64.so依赖库文件上传至/usr/java/jdk1.8.0_121/jre/lib/amd64路径下
在Windows下(Eclipse里直接运行Tomcat)调用语音转文字接口没问题,但部署到阿里云Linux上后,只要调用语音转文字接口就会报错,报错代码如下:
一开始只注意到报20021引擎错误,于是在其上找原因,走了很多弯路,经过仔细研究后,偶然注意到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)
1 各个版本的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
7 ../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 成功后查看