Windows环境下使用VS2010编译OpenSSL

时间:2021-08-30 16:02:52
准备工作:

1、安装VC++ 2010。

2、需要perl的支持,下载最新ActivePerl并安装,网址:http://www.activestate.com/

3、下载 Openssl并解压,下载网址:https://www.openssl.org/source/


编译步骤:

1.使用VS200510下的Visual Studio 2010 Command Prompt进入控制台模式

  开始菜单->所有程序->Microsoft->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 2010 Command Prompt

2.进入openssl源码的目录

  命令行键入 cd /D E:\openssl-1.0.1p  //把路径替换成自己的源码路径

3.命令行键入 perl configure VC-WIN32

运行上述命令后如果出现错误:‘perl’ 不是内部或外部命令,也不是可运行的程序或批处理文件。则需要按照http://www.vcerror.com/?p=2021这上面的方法设置下

4.命令行键入 ms\do_ms.bat

另外两种方式 如果使用也必须保证本机安装有相应的编译器才能使用。 
:ms\do_masm (默认vc自带的;也可以自己下载masm并安装) 
:ms\do_nasm (需要下载nasm)

注意:请不要cd进ms目录再执行do_ms.bat命令,会因为当前目录不对而报错。

5.编译分两种情况,生成静态库和动态库
  (1) 如果是编译OpenSSL动态库,则在命令行键入 nmake -f ms\ntdll.mak
    编译成功课在文件夹out32dll里面查看输出的文件,包括应用程序的exe文件、lib文件、dll文件。
  (2) 如果是编译OpenSSL静态库,则在命令行键入 nmake -f ms\nt.mak
    编译成功课在文件夹out32里面查看输出的文件,包括应用程序的exe文件、lib文件。

注意:此处编译需要较长时间,请耐心等待,切勿人为中断。

上述版本在编译 openssl-1.0.1p 及更低版本的时候没有问题,但如果编译高版本,比如 openssl-1.0.2d ,编译的时候会出现如下错误:

tmp32dll\sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32dll\sha1-586.asm(1576) : error A2070:invalid instruction operands

具体解决方法可参考文章:http://www.vcerror.com/?p=2023

到此编译已经完成,将OpenSSL下的include文件夹、lib文件、dll文件考出,使用的时候包含进去就行了。

  另外还有几个命令可能会用到:

  测试OpenSSL动态库:nmake -f ms\ntdll.mak test
  测试OpenSSL静态库:nmake -f ms\nt.mak test
  安装OpenSSL动态库:nmake -f ms\ntdll.mak install
  安装OpenSSL静态库:nmake -f ms\nt.mak install
  清除上次OpenSSL动态库的编译,以便重新编译:nmake -f ms\ntdll.mak clean
  清除上次OpenSSL静态库的编译,以便重新编译:nmake -f ms\nt.mak clean