windows编译安装gmssl、openssl

windows编译安装gmssl、openssl

背景

最近在研究国密相关的东西,需要编译一些库,就找了一些如gmssl,tassl,由于在windows上的,先选了gmssl,结果遇到好多问题,但总算编过去了,但是不准备用了,tassl看了下没去弄,准备下一步开始看看openssl,新版本已经支持国密了。

一、windows编译安装gmssl过程注意事项:
直接使用普通的cmd可编译通过,成功
(0)安装nasm,并添加路径到环境变量
(1)头文件缺失:makefile文件CC /I 新增目录, 或者将以下三个文件夹内容合并到include目录下子目录ex中:
        D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\include
        C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
        C:\Program Files (x86)\Windows Kits\8.1\Include
(2)libcrypto-1_1.rc(1) : fatal error RC1015: cannot open include file 'winver.h'.
        将rc.exe目录C:\Program Files (x86)\Windows Kits\8.1\bin\x64添加到环境变量path
        $(RC) /I "." /I "crypto\include" /I "include" /I "D:\Downloads\GmSSL-master\GmSSL-master\include\ex" #添加include路径
(3)LINK : fatal error LNK1104: 无法打开文件“ucrt.lib”
      NMAKE : fatal error U1077: “link”: 返回代码“0x1”
          将目录C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x86添加到环境变量lib(注意x86和x64要与之前perl命令一致)
(4)perl Configure VC-WIN32或perl Configure VC-WIN64A对应系统错误(检查系统环境变量修改为x86或x64,重新更新环境执行perl,每次修改环境变量后,要重启命令行提示符运行)
(5)libcrypto-1_1.def : error LNK2001: 无法解析的外部符号 EVP_get_ciphernames
     libcrypto-1_1.def : error LNK2001: 无法解析的外部符号 EVP_get_digestnames
         更换evp/names2.c文件(源码仓库里历史提交里找之前的版本,新代码里删除了上面两个声明)
(6)win32编译成功,win64已放弃

直接使用vs2015 x86本机工具命令提示符(win10开始菜单左侧所有程序),简单一点,开始不知道,成功
切换到D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin目录,执行vcvars32.bat
perl Configure VC-WIN32 no-asm --prefix=c:\gmssl32\
nmake #修改makefile,$(CC)后添加/I "D:\Downloads\GmSSL-master\GmSSL-master\include\ex",包括$(RC)后面的目录
nmake test #过程中会出现gmssl.exe异常停止服务,但是好像不影响
nmake install #报错无法写入c盘,使用管理员权限也不行,更换本地路径后就可以

参考链接:
https://github.com/guanzhi/GmSSL/issues/992
https://www.cnblogs.com/bigben0123/p/12650545.html
https://blog.csdn.net/qq_40153886/article/details/106933931

整体感觉体验很差,不想用了,貌似ssl库是1.1.0的,还需要更新

二、openssl windows安装(dll/lib/32/64):
openssl: 1.1.1g
perl: v5.22.1
nasm: 2.15.05 
cl: x86 19.00.24215.1
    x64 19.00.24215.1

32位编译:
直接使用普通的cmd可编译通过,需要上述过程中环境变量的设置,比较麻烦,主要问题就是头文件缺失,按上述把文件都找到,添加到目录就可以了,成功
perl Configure VC-WIN32 no-asm --prefix=c:\openssl32\ #--debug
nmake #修改makefile,$(CC)后添加/I "D:\Downloads\openssl-OpenSSL_1_1_1g\include\ex",包括$(RC)后面的目录
nmake test
nmake install

直接使用vs2015 x86本机工具命令提示符(win10开始菜单左侧所有程序),成功
切换到D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin目录,执行vcvars32.bat
perl Configure VC-WIN32 no-asm --prefix=c:\openssl32\ #--debug 编译debug版本
nmake #修改makefile,$(CC)后添加/I "D:\Downloads\openssl-OpenSSL_1_1_1g\include\ex",包括$(RC)后面的目录
nmake test
nmake install

64位编译:
直接使用普通的cmd会遇到以下问题,虽然解决了一些,仍然报计算机类型冲突,失败
perl Configure VC-WIN64A no-asm --prefix=c:\openssl64\ #--debug
64位编译,手动修改cc,rc的可执行程序路径,如:
CC=D:\ProgramFiles\"Microsoft Visual Studio 14.0"\VC\bin\amd64\cl.exe
RC=C:\"Program Files (x86)\Windows Kits"\8.1\bin\x64\rc.exe
cl ... crypto 32 > libcrypto.def 时报错:
    IF EXIST .manifest DEL /F /Q .manifest
    IF EXIST libcrypto-1_1-x64.dll DEL /F /Q libcrypto-1_1-x64.dll
    link /nologo /debug /dll  /nologo /debug  /implib:libcrypto.lib /out:libcrypto-1_1-x64.dll /def:libcrypto.def @C:\Users\ADMINI~1\AppData\Local\Temp\nmD4A8.tmp || (DEL /Q libcrypto-1_1-x64.* libcrypto.lib && EXIT 1)
    MSVCRT.lib(chkstk.obj) : fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突
    找不到 D:\Downloads\openssl-OpenSSL_1_1_1gx64\libcrypto-1_1-x64.*

直接使用vs2015 x64本机工具命令提示符(win10开始菜单左侧所有程序),成功
切换到D:\ProgramFiles\Microsoft Visual Studio 14.0\VC\bin\amd64目录,执行vcvars64.bat
perl Configure VC-WIN64A no-asm --prefix=c:\openssl64\ #--debug 编译debug版本
nmake #修改makefile,$(CC)后添加/I "D:\Downloads\openssl-OpenSSL_1_1_1g\include\ex",包括$(RC)后面的目录
nmake test
nmake install

参考链接:
https://blog.csdn.net/yuiiiii/article/details/81297880
https://blog.csdn.net/danscort2000/article/details/81300248

你可能感兴趣的:(openssl,windows,c++,openssl,gmssl,国密)