WIN10 GMSSL編譯

撫琴思伯牙發表於2021-07-20

從git上拉取GMSSL程式碼

http://gmssl.org/上可以拉取,或者直接從git上https://github.com/guanzhi/GmSSL拉也行。
我是在git上下的,檔案為gmssl-master.zip,訪問Git網路時好時壞,CSDN好像有提供映象之類的。PS:從git上拿的會有點問題(解決了),後面細說,但從官網提供的下載編譯我當時是遇到了其他錯誤資訊(沒解決)。

環境

  • Visual studio 2019 專案使用最新的VS就行,別用VC等老古董。
  • perl 官網下,正常安裝就行,不過官網一打是開給的命令列下載的方式,我怕搞不定,直接百度搜資源下的。ActivePerl5_32這是我的版本。
  • NASM 一個彙編器,沒有的話,後面會有報錯(但可以用引數選擇不使用匯編,忽略掉這個錯誤),下文細說。直接百度搜,下載,我下的是nasm-2.14.03rc2-installer-x64.exe,後面直接安裝。然後設定系統環境變數,把安裝的路徑新增到path裡,就ok了。PS:在新增環境變數後,再啟動的命令列才會讀到這個變數。

命令列生成makefile和nmake執行

程式碼裡是沒有makefile檔案的,使用pl指令碼檔案生成的makefile檔案,這就是安裝perl的原因
管理員方式啟動VS的命令列到GMSSL的專案路徑下,執行下面的命令(先別執行,看我下文錯誤資訊,先改了再執行)

perl Configure VC-WIN32
nmake
nmake install

perl Configure VC-WIN32

  • 此命令如果沒有下載NASM 會報:NASM NOT FOUND:xxxxxxx,但是在命令後面帶上 no-asm 可以避開這個問題。
  • 正常執行後會成功生成makefile檔案

nmake

  • 此命令開始編譯檔案,會報一個錯誤,如下:
libcrypto.* libcrypto-1_1.* && EXIT 1)
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”

此時需要拿到歷史版本的names2.c檔案替換掉當前原始碼中(GMSSLPATH\crypto\evp)names2.c檔案,我看git上的歷史版本已經沒有了,但我從釋出版本(此時僅一個)中找到了

git上:

image
image
git地址:https://github.com/guanzhi/GmSSL/releases

CSDN上:

image
CSDN地址:https://codechina.csdn.net/mirrors/guanzhi/gmssl/-/releases/gmbrowser-v0.1?spm=1033.2243.3001.5876
在同樣的目錄下拿到names2.c檔案,我拿的版本對應的檔案修改日期為‎2018‎年‎4‎月‎6‎日,替換自己下載的原始碼中的檔案即可
然後執行nmake

如果你很不幸沒有看到我前文勸你先別執行的話,那麼你需要刪掉你已經報錯的原始檔,重新解壓出來乾淨的檔案,再替換檔案,最後再nmake

nmake install

執行後將在 C:\Program Files (x86)\GmSSL 目錄下生成如下目錄結構:
image


end

相關文章