1. 程式人生 > 其它 >VS2013編譯GMSSL

VS2013編譯GMSSL

技術標籤:

本文參考自https://blog.csdn.net/lt4959/article/details/85984385,下面是自己編譯的情況
官方安裝教程:http://gmssl.org/docs/install.html

1、安裝ActivePerl、Nasm

我本來安裝的是ActivePerl-5.28,但是執行perl Configure VC_WIN32後顯示沒有安裝WIN32-Console。最後在這個網址下找到了已添加了WIN32-Console的安裝檔案,版本是5.26:https://platform.activestate.com/DonaldXY/ActivePerl-5.26/distributions

,下載該網址下的exe檔案,安裝即可。

下載並安裝Nasm彙編器,並將其新增到系統環境變數Path中:https://www.nasm.us/

2、編譯第一步

管理員身份開啟Visual Studio Tools下的Developer Command Prompt控制檯,通過cd命令進入到GmSSL-master解壓目錄後,輸入

perl Configure VC-WIN32

若要編譯64位,需開啟64位的控制檯,否者nmake時會報錯,編譯64位使用如下命令配置:

perl Configure VC-WIN64A

會出現如下提醒:在這裡插入圖片描述
但配置通過了,因此這一步無需考慮安裝dmake。

3、編譯第二步

在上述控制檯中輸入:

nmake

報錯如下:

libcrypto-1_1.def : error LNK2001: 無法解析的外部符號 EVP_get_ciphernames
libcrypto-1_1.def : error LNK2001: 無法解析的外部符號 EVP_get_digestnames
libcrypto.lib : fatal error LNK1120: 2 個無法解析的外部命令
NMAKE : fatal error U1077: “link”: 返回程式碼“0x1”
Stop.

顯示無法解析EVP_get_ciphernamesEVP_get_digestnames,查閱https://github.com/guanzhi/GmSSL/issues/1037

發現,是由於include\openssl\evp.h檔案中的這兩個函式的問題:

char *EVP_get_ciphernames(int aliases);
char *EVP_get_digestnames(int aliases);

將檔案中的這兩行刪掉
同時刪除util\libcrypto.num檔案中關於EVP_get_ciphernamesEVP_get_digestnames的兩行,再次執行nmake,即可正常編譯。

4、編譯第三步
nmake install

執行正常,安裝完成後,可以在C:\Program Files (x86)\GmSSL目錄下看到所安裝的GMSSL,若64位,則目錄為C:\Program Files\GmSSL

若使用QT呼叫gmssl庫出現問題,可參考這篇文章:https://yangleisx.github.io/2020/04/21/log-dev-qt-ssl/