gmssl编译linux,linux 编译安装GmSSL记录
1,在GMSSL官網下載源碼包。
2,參考官網編譯安裝流程:http://gmssl.org/docs/quickstart.html
進行編譯安裝。
3,安裝完畢后運行gmssl version出錯如下:
gmssl:relocation error: gmssl: symbol BIO_debug_callback version OPENSSL_1_1_0d not defined in file libcrypto.so.1.1 with link time reference
網上查到的方案:
https://www.cnblogs.com/wangzihong0213/p/10856875.html
使用ldd查看gmssl使用的動態鏈接庫位置,發現會使用linux-gun下存在的庫,并沒有鏈接編譯源碼生成的動態鏈接庫。進行簡單的拷貝可能導致無法預測的其他錯誤。
故思考后的解決方案:
思路:修改gmssl運行時使用的動態鏈接庫為自身編譯生成的庫文件。
需要解決問題:1,如何修改動態鏈接庫的鏈接路徑,參見:https://blog.csdn.net/wh8_2011/article/details/79519293
得知編譯源碼時可以指定軟件優先進行搜索的路徑。即編譯源碼時使用參數:-Wl,rpath=選項
。故對Makefile做如下修改:(粗體字部分為我做的修改)
LIBRPATH=$(INSTALLTOP)/$(LIBDIR)
MANDIR=$(INSTALLTOP)/share/man
DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME)
HTMLDIR=$(DOCDIR)/html
# MANSUFFIX is for the benefit of anyone who may want to have a suffix
# appended after the manpage file section number.? "ssl" is popular,
# resulting in files such as config.5ssl rather than config.5.
MANSUFFIX=
HTMLSUFFIX=html
CROSS_COMPILE=
CC= $(CROSS_COMPILE)gcc
CFLAGS=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"$(OPENSSLDIR)\"" -DENGINESDIR="\"$(ENGINESDIR)\"" -Wall -O3 -pthread -m64 -DL_ENDIAN? -Wa,--noexecstack -Wl,-rpath=$(LIBRPATH)
CFLAGS_Q=-DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM -DOPENSSLDIR=\"\\\"$(OPENSSLDIR)\\\"\" -DENGINESDIR=\"\\\"$(ENGINESDIR)\\\"\"? -Wa,--noexecstack -Wl,-rpath=$(LIBRPATH)
LDFLAGS=
PLIB_LDFLAGS=
EX_LIBS= -ldl
LIB_CFLAGS=-fPIC -DOPENSSL_USE_NODELETE
# LIB_LDFLAGS=-Wl,-znodelete -m64
LIB_LDFLAGS=-Wl,-rpath=$(LIBRPATH) -znodelete -m64
DSO_CFLAGS=-fPIC -DOPENSSL_USE_NODELETE
DSO_LDFLAGS=$(LIB_LDFLAGS)
若已執行了make install命令則需要執行:make uninstall進行卸載,再進行make clean清除編譯生成的過程文件。保存修改后的Makefile后重新運行make install進行安裝。
查看效果:ldd /usr/local/bin/gmssl
linux-vdso.so.1 (0x00007fff81994000)
libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f00a293a000)
libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f00a25ee000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f00a25ca000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f00a25a9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f00a23e8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f00a2a72000)
上述列出的動態鏈接庫中libcrypto.so.1.1和libssl.so.1.1鏈接的路徑已改為編譯生成的庫文件。至此可正常運行GMSSL。
總結
以上是生活随笔為你收集整理的gmssl编译linux,linux 编译安装GmSSL记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ dll的隐式与显式调用
- 下一篇: n个字符串按照字典序排列