[转]Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib

开发 同时被 3 个专栏收录
110 篇文章 0 订阅
18 篇文章 0 订阅
45 篇文章 0 订阅

原文:

https://blog.csdn.net/YAOJINGKAO/article/details/53041165?locationNum=10&fps=1

       首先本文参考了以下网页,感谢!

       http://www.jianshu.com/p/4522f17ce2ff和http://developer.covenanteyes.com/building-openssl-for-visual-studio/

        编译release版本和debug版本一般只要一个能编译通过,另一个也不会存在问题的。所以以下尽量精简文章长度,最后附有编译所需的所有命令行。
1、准备工作:

    1)下载安装编译必须的ActivePerl:http://www.activestate.com/activeperl/downloads
    有说法说StrawbarryPerl也行,我没试过就不知道能不能成功了

    2)下载最新的openssl源码:https://www.openssl.org/source/
    我这里下载的是2016年11月4日最新的openssl 1.0.2j版本。然后解压至C盘根目录,形成如下目录结构:
    C:\openssl-1.0.2j\include

2、设置VC编译环境【编译32位64位有区别】

以下所有操作都是在【VS2015开发人员命令提示】中进行的,具体位置一般是【开始->所有程序->Visual Studio 2015-> Visual Studio Tools】下;

1. 【编译32位openssl】
    命令如下:
        cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
        vcvars32.bat

2. 【编译64位openssl】
    命令如下:
        cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64
        vcvars64.bat

3、配置编译文件和类型【编译32位64位有区别】

注意:
如果不是想单独拿编译好的库出来用,而是需要交叉编译,比如接着编译libcurl,则可以使用如下命令全部一次性编译32位所有版本的库:

ms\32all.bat no-asm

       实际我在通过这条命令编译的时候,也会编译失败无法继续;
       如果想要交叉编译libcurl,还是用libcurl\project\build-openssl.bat更好。
       目前我已经通过这个文件成功交叉编译了libcurl with openssl gzip的release版本的lib,
       详细方法请参考我的博客:http://blog.csdn.net/yaojingkao/article/details/53044361

如果只是想编译OpenSSL,请接着看下面:
1)先进入openssl-1.0.2j目录

cd C:\openssl-1.0.2j

2)配置输出目录和编译类型【编译32位、64位;release、debug有区别】
命令格式如下:

perl Configure [类型] no-asm --prefix="[输出目录]"      注:命令中是不需要[]的

 [编译类型]可以选择以下:

参数     含义
debug-VC-WIN32     编译32位debug版本
VC-WIN32     编译32位release版本
debug-VC-WIN64A     编译64位debug版本
VC-WIN64A     编译64位release版本

    [输出目录]理论任何地方都可以。自己确定好就行

    3)配置模式:

        【编译32位openssl】
        命令如下:

        ms\do_ms.bat
 

        感谢CSDN网友:WeiXin_zjmgly指出,如果之前编译使用了no-asm参数,则需要修改命令为:

        ms\do_nasm
 

        否则会在编译引用了该openssl库的工程中出现”error LNK2001和error LNK2019 无法解析的外部符号”这个错误。(该解决方法由 WeiXin_zjmgly 提供)
        【编译64位openssl】
        命令如下:

        ms\do_win64a.bat
 

    执行这一步之后,在ms目录下会生成nt.mak和ntdll.mak两个编译配置文件
    nt.mak 用于生成静态lib库
    ntdll.mak 用于生成动态dll库

4、编译【编译静态库、动态库有区别】

    【编译openssl静态链接库】
    命令如下:

nmake -f ms\nt.mak
nmake -f ms\nt.mak test
nmake -f ms\nt.mak install

   【编译openssl动态链接库】
    命令如下:

nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak test
nmake -f ms\ntdll.mak install

    执行test命令可以测试编译好的库,测试成功了就可以运行install命令,运行完之后才会在输出目录中找到输出的编译好的库和加入工程时必要的include文件。
    需要注意的地方:

1)设置编译类型的时候千万别忘记no-asm参数,关闭汇编模式,否则会出现类似如下错误:

Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1427) : error A2070: invalid instruction operands
tmp32\sha1-586.asm(1571) : error A2070: invalid instruction operands
NMAKE : fatal error U1077: 'ml' : return code '0x1'
Stop.

2)设置VC编译环境的时候,注意有32位和64位的区别,网络上大多数是因为没有注意这个导致编译失败。
最后附上编译所需的所有命令(一个例子):

openssl目录:c:\openssl-1.0.2j\
以编译64位release版本的dll为例子:

cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
vcvars32.bat
perl Configure VC-WIN64A no-asm --prefix="c:\openssl-1.0.2j\build-vc14-debug-win64-dll"
ms\do_win64a.bat
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak test
nmake -f ms\ntdll.mak install
nmake -f ms\ntdll.mak clean

至此,就可以将c:\openssl-1.0.2j\build-vc14-debug-win64-dll目录复制到需要使用的地方就可以使用了。
 

 

  • 1
    点赞
  • 1
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值