场景

     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

备注:这种方案非常冒险可能会导致系统不稳定,应该拷贝到程序运行目录