背景描述
因為要測一個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 下面這一步。是以,建議大家,以後碰到類似的問題,建議大家加載到系統的加載目錄下。