背景描述
因为要测一个GmSSL加密的功能。于是去下载了GmSSL的源码对其进行编译,验证功能是否可用。本以为是个简单的功能,没想到的是,出现了一个奇怪的现象。很诡异,特记录一下,以备后用,同时分享给大家,希望对大家有所帮助~
问题描述:
普通用户编译GmSSL后,可以直接使用。但是切换到root用户后,直接报错。报错信息如下:
gmssl: relocation error: gmssl: symbol PBEPARAM_it, version OPENSSL_1_1_0d not defined in file libcrypto.so.1.1 with link time reference
通过ldd命令,可以清楚的看到有两个库的引用位置不一样,所以初步推测,大致问题所在是OPENSSL库,冲突导致的。
在解决问题之前,先解释下为什么两者加载的库不一样。普通用户是因为我执行它的时候报错,找不到库,于是我把它复制到/usr/lib64/目录下。所以普通用户就直接可以正常使用gmssl。但是root为啥不行?要如何解决下它呢?
解决方法
把相关的so文件,所在目录写到系统加载的目录里面。这样无论是谁都可以加载到它。
1、要确认so所在的文件路径。通常在GmSSL的目录里有
2、把它添加到系统加载的so目录里。
cat /etc/ld.so.conf 通过这个文件查找加载的目录
echo "/home/GmSSL-GmSSL-v2/" >> /etc/ld.so.conf.d/gmssl.conf
3、手动加载一次
ldconfig
4、验证
一些想法:
在解决此问题过程中,自己走了个弯路。导致花费的时间有点长。就是在普通用户完成后,报错找不到库,然后自己把它复制到/usr/lib64 下面这一步。所以,建议大家,以后碰到类似的问题,建议大家加载到系统的加载目录下。