准备工作
官网下载openssl:/source/index.html (openssl.org)/source/index.html (openssl.org)
官网下载mysy2:MSYS2
ps:在windows平台上使用mingw64编译openssl需要一个类Unix环境,因此选择MSYS2的shell,虽然使用git bash也是可以的,但是我测试发现git bash上的perl缺少部分模块,导致无法成功configure,MSYS2安装好后默认携带一个perl,这个perl是能成功configure的
最后需要安装MinGW64,可以直接在MSYS2上安装,具体安装方法还请另行查找,我原本环境里面就有一个MinGW64,因此只需要将其添加到MSYS2的shell的环境变量中即可,添加环境变量的方法如下:
找到MSYS2的安装目录,其目录下有个etc文件夹,etc文件夹里面找到profile文件,修改profile文件
添加好环境变量后保存,重新打开MSYS2的shell输入make --version或者mingw32-make --version测试是否添加成功
Configure
下载完成的openssl源码根目录下可以看到一个Configure文件,我们需要通过MSYS2的shell进入到这个目录下面,然后执行
./Configure mingw64 -static --prefix="安装目录(绝对路径)" zlib no-dso
- mingw64:表示是使用mingw64编译
- static:表示编译静态库,使用no-pic no-thread no-shard效果相同
- zlib:表示使用zlib的静态库
- no-dso:表示不使用其他动态库
ps:具体的配置选项可以查看Configure文件,里面有部分选项解释,可以根据个人具体情况来选择
ps:Configure是一个perl程序文件,因此本质是使用perl来执行Configure生成不同编译环境下需要用到的文件,因此不一定需要用到MYSY2只要有一个perl和类Unix的shell都是可以的,perl推荐下载Strawberry Perl因为它的模块比较全,下载地址:Strawberry Perl for Windows
执行Configure完成后,当前目录下会多出一个makefile文件
开始编译
还是在openssl的源码根目录下,经过Configure后多出了一个makefile文件,然后在MYSY2的shell中执行指令
make -j8 或者 mingw32-make -j8
ps:-j8这里表示编译时使用到的cpu核心数,我这里是用的8个核心同时编译,根据自己实际情况填写即可
然后
make install -j8 或者 mingw32-make install -j8
通过上述指令将openssl安装到Configure时prefix指定的文件夹中,安装成功的情况如下:
bin目录中是openssl的可执行文件
include目录中是openssl的头文件
lib64中是编译好的静态库
其中libcrypto.a和libssl.a就是我们需要的openssl静态库了
将include中的头文件和libcrypto.a以及libssl.a文件拷贝到自己项目中即可
使用Openssl静态库
编译并将静态库拷贝到自己项目中后,要想使用openssl中的api需要在编译自己项目时多引入一些额外的静态库,一个是windows下的网络套接字库libws2_32.a,一个是windows下的密码学库libcrypt32.a, 还有一个就是zlib的静态库libz.a,正常来说MinGW64中都会包含上述三个库,如果不引入就是报错undefined reference to ...
上图就是没有引入libz.a情况下报错
结语
至此就是本次我编译openssl的全部经验,如有问题还请各位大佬多多指教,如有疑问也可以提出,我知道的一定都会回答,最后因为每个人的实际的编译环境可能不一样,因此这篇攻略不一定适用,还请仅作参考