最近要用到 libeay32.lib、ssleay32.lib 两个静态库文件,因为以前项目中其中一个文件在 64 位编译时选择的不是 MTd,而导致我引入该库以后提示运行时库和其他库声明冲突,其实实际原因就是生成选项不一样。最终我还是决定自己编译 openssl 的库来使用。
下载所需工具
- Perl:http://downloads.activestate.com/ActivePerl/releases/5.26.1.2601/ActivePerl-5.26.1.2601-MSWin32-x64-404865.exe
- NASM:https://www.nasm.us/pub/nasm/releasebuilds/2.14rc15/win64/nasm-2.14rc15-installer-x64.exe
- OpenSSL:https://www.openssl.org/source/openssl-1.0.2p.tar.gz
准备工作
安装 Perl 和 NASM,默认下一步下一步就可以了。Perl 安装的时候记得勾选将执行程序添加到系统环境变量中。NASM 安装时没有选项,需要在完成后要将执行程序添加到系统的环境变量中。如下图所示:
解压 openssl-1.0.2p.tar.gz 到任意目录,比如 D:openssl-1.0.2p
开始编译
打开 VS 的命令行工具(我这里安装的是 VS2013),所以目录在 C:Program Files (x86)Microsoft Visual Studio 12.0Common7ToolsShortcuts
下,如果想编译 32 位的静态库就使用 VS2013 x86 本机工具命令提示
,如果想编译 64 位,就使用 VS2013 x64 本机工具命令提示
。
打开后切换到 D:openssl-1.0.2p 目录,执行如下命令生成 makefile 文件。
代码语言:javascript复制perl configure VC-WIN32
如果是生成 64 位则执行
代码语言:javascript复制perl configure VC-WIN64A
成功后如下所示:
如果你要编译 debug 版本,则修改 ms/do_nasm.bat
文件,将原来
perl utilmkfiles.pl >MINFO
perl utilmk1mf.pl nasm VC-WIN32 >msnt.mak
perl utilmk1mf.pl dll nasm VC-WIN32 >msntdll.mak
perl utilmk1mf.pl nasm BC-NT >msbcb.mak
perl utilmkdef.pl 32 libeay > mslibeay32.def
perl utilmkdef.pl 32 ssleay > msssleay32.def
修改为:
代码语言:javascript复制perl utilmkfiles.pl >MINFO
perl utilmk1mf.pl nasm debug VC-WIN32 >msnt.mak
perl utilmk1mf.pl dll nasm debug VC-WIN32 >msntdll.mak
perl utilmk1mf.pl nasm BC-NT >msbcb.mak
perl utilmkdef.pl 32 libeay > mslibeay32.def
perl utilmkdef.pl 32 ssleay > msssleay32.def
就是将第二行和第三行编译选项增加了 debug。修改完成后执行 ms/do_nasm.bat
。
msdo_nasm.bat
运行后结果如下:
修改完成执行如下命令开始编译(如果想编译成 dll,则执行 nmake -f msntdll.mak,编译前要修改 msntdll.mak 将 CFLAG 的 /MD 属性修改为 /MT,与你调用项目匹配):
代码语言:javascript复制nmake -f msnt.mak
如果没有错误,几分钟后编译后的文件就会生成于 D:openssl-1.0.2pout32
目录下。