场景
CentOS7.6 ARM版本服务程序迁移到中标麒麟服务器上,执行程序,提示出错:
error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory
error while loading shared libraries: libssl.so.10: cannot open shared object file: No such file or directory
排查
[root@host-10-208-196-203 cmms]# find / -name libcrypto.so*
/usr/lib64/libcrypto.so.1.1
/usr/lib64/libcrypto.so.1.1.1f
中标麒麟服务器安装了1.1.1版本的OpenSSL
已有的编译环境依赖的版本是1.0.2,版本太低
解决方案
拷贝编译环境中的/usr/lib64/libcrypto.so.1.0.2k libssl.so.1.0.2k到程序路径,然后修改名称即可
libssl.so.1.0.2k修改为libssl.so.10
libcrypto.so.1.0.2k修改为libcrypto.so.10
原理是在编译程序的时候,添加Wl,rpath=./优先在当前程序目录加载动态库
扩展
场景
ARM版本CentOS系统服务程序迁移到银河麒麟服务器,启动程序报错:
error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file
排查过程
查看安装库文件 rpm -qa |grep libnsl
返回结果如下 libnsl.so.2
搜索库版本 yum search all libnsl
libnsl2.aarch64
解决方案
编译环境拷贝libnsl.so.1文件到/usr/lib64/文件夹目录下,然后执行ldconfig
备注:这种方案非常冒险可能会导致系统不稳定,应该拷贝到程序运行目录