Openssl VS编译方法
工具:
1. 编译环境win10+vs2015专业版
2. ActivePerl工具,官网下载链接:http://www.activestate.com/activeperl/downloads
3. openssl源码,下载链接:https://www.openssl.org/source/,选择2016-May-03 13:57:13 openssl-1.0.1t.tar.gz这个版本,之所以没有选择1.1.0,发觉两个版本差异较大,ms文件夹下缺少很多文件,没办法按照此方法编译。
步骤:
1. 安装ActivePerl, 并添加环境变量(可以默认勾选,或者手动添加,如path=d:\perl\bin)。
2. 解压openssl。
3. 点击 windows 开始->所有应用->vs2015->开发者命令提示(Developer Command Prompt for 2015)。
4. CD到解压后的openssl的根目录。
5. 执行命令:perl Configure debug-VC-WIN32(或者VC-WIN64A,取决于编译库类型,可以用–prefix=路径指定生成路径).
6. ms\do_ms.bat(创建makefile文件,64位需要使用ms\do_win64a.bat)
7. 执行nmake -f ms\ntdll.mak(编译动态库)。
8. 执行nmake -f ms\ntdll.mak test查看库是否有问题。
9. 执行nmake -f ms\ntdll.mak install 。
TIPs:
编译动态库:
nmake -f ms\ntdll.mak
编译静态库:
nmake -f ms\nt.mak
测试动态库:
nmake -f ms\ntdll.mak test
测试静态库:
nmake -f ms\nt.mak test
安装动态库:
nmake -f ms\ntdll.mak install
安装静态库:
nmake -f ms\nt.mak install
清除上次动态库的编译,以便重新编译:
nmake -f ms\ntdll.mak clean
清除上次静态库的编译,以便重新编译:
nmake -f ms\nt.mak clean
- [编译类型]可以选择以下:
| 参数 | 含义 |
|---|---|
| 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- 1
感谢CSDN网友:WeiXin_zjmgly指出,如果之前编译使用了no-asm参数,则需要修改命令为:
ms\do_nasm- 1
否则会在编译引用了该openssl库的工程中出现”error LNK2001和error LNK2019 无法解析的外部符号”这个错误。(该解决方法由 WeiXin_zjmgly 提供)
- 【编译64位openssl】
命令如下:ms\do_win64a.bat- 1
执行这一步之后,在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- 1
- 2
- 3
- 【编译openssl动态链接库】
命令如下:
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak test
nmake -f ms\ntdll.mak install- 1
- 2
- 3
- 执行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.- 1
- 2
- 3
- 4
- 5
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- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
至此,就可以将c:\openssl-1.0.2j\build-vc14-debug-win64-dll目录复制到需要使用的地方就可以使用了。
最后,附上一个我编译好的VS2015版本的openssl(1.0.2j)所有库,共八个链接库。
下载地址:http://download.csdn.net/detail/yaojingkao/9673763
Openssl VS编译方法的更多相关文章
- Qt官方对OpenSSL的编译方法的描述,单独下载的Qt library则一般不带SSL(包括QT FAQ)
https://wiki.qt.io/MSYS2http://wiki.qt.io/Compiling_OpenSSL_with_MinGWhttps://wiki.qt.io/MinGW-64-bi ...
- openssl编译方法
受不了了,终于编译成功了openssl,写一下编译方法吧 准备: 0:要编译openssl,必不可少的是代码,去下载 https://www.openssl.org/source/ 1:要有一个VS系 ...
- osip及eXosip的编译方法
osip及eXosip的编译方法 在最新版本的osip2.exosip2中不支持在VC6.0下编译osip.exosip协议栈的方法 说明: 1.以下文章中的osip版本为3.1.0 2.eXosip ...
- 修改OpenSSL默认编译出的动态库文件名称
在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中 ...
- 详解Linux(centos7)下安装OpenSSL安装图文方法
OpenSSL是一个开源的ssl技术,由于我需要使用php相关功能,需要获取https的文件所以必须安装这个东西了,下面我整理了两种关于OpenSSL安装配置方法. 安装环境: 操作系统:CentO ...
- nginx - ubutun下安装nginx(详述编译方法)
一.使用apt命令安装 sudo apt-get install nginx 二.编译方法安装(个人实践方法,具体见官方文档) 1)说明:我使用的虚拟机是64位 ubuntu server14.04, ...
- [转]详解Linux(centos7)下安装OpenSSL安装图文方法
OpenSSL是一个开源的ssl技术,由于我需要使用php相关功能,需要获取https的文件所以必须安装这个东西了,下面我整理了两种关于OpenSSL安装配置方法. 安装环境: 操作系统:CentO ...
- Genome2D编译方法
Genome2D是一个高效的2D引擎,现在支持Flash(stage3d)和HTML5,因为只有作者一个人在维护,就没开源代码. 最近和作者沟通了下,已经开源啦. 作者划分了几个模块,编译起来不是特别 ...
- Spark-1.0.1 的make-distribution.sh编译、SBT编译、Maven编译 三种编译方法
fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3775343.html 本文编译方法所支持的hadoop环境是Hadoop-2.2.0, ...
随机推荐
- opencv 角点检测+相机标定+去畸变+重投影误差计算
https://blog.csdn.net/u010128736/article/details/52875137 https://blog.csdn.net/h532600610/article/d ...
- 爬虫之UserAgent
UserAgent简介 UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及 ...
- mysql总结思维导图
mysql总结思维导图.脑图 先整理了一个思维导图出来,到时候再继续补充并且深入挖掘一下,再写博文. 另外,看了很多优秀的博文,在这里先mark一下. https://www.cnblogs.com/ ...
- 搭建高性能Jboss负载均衡集群
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/a1314517love/article/details/26836357 负载均衡集群是由两台或者两 ...
- JDK动态代理实现源码分析
JDK动态代理实现方式 在Spring框架中经典的AOP就是通过动态代理来实现的,Spring分别采用了JDK的动态代理和Cglib动态代理,本文就来分析一下JDK是如何实现动态代理的. 在分析源码之 ...
- Centos Docker1.12 远程Rest api访问的配置方法
Docker默认是没有开启HTTP远程访问的,默认只支持通过unix socket通信操作docker daemon,需要使用HTTP restful接口需要修改配置. 1.修改配置文件,文件位置/l ...
- oracle的统计信息的查看与收集
查看某个表的统计信息 SQL> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; Session altered. SQL&g ...
- Charles 抓包工具的使用
抓包工具有很多,目前用过的有Charles, Fiddler, burpsuite.下面主要是Charles 的应用实例. 一. 用Charles抓包 1. PC 抓包 打开Charles, 确保“录 ...
- cpu与寄存器,内核态与用户态及如何切换
cpu:相当于计算机的大脑负责运算和发送命令: 寄存器:寄存器是cpu当中的一个有限存储部件,cpu从内存调用数据时,寄存器会将从内存调用的数据进行更新在寄存器中以一个字或变量进行存储. 寄存器总共分 ...
- Discuz! 论坛
Discuz! 是腾讯旗下 Comsenz 公司推出的以社区为基础的专业建站平台,帮助网站实现一站式服务.让论坛(BBS).个人空间(SNS).门户(Portal).群组(Group).应用开放平 ...