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, ...
随机推荐
- D. Mike and Feet---cf548D(最值)
题目链接:http://codeforces.com/problemset/problem/548/D 给你n个数,对于(1,n)长度,让你找到线段的最小值的最大值是多少 #include<io ...
- python学习笔记(七)操作mysql
python操作mysql数据库需要先安装pymysql模块,在之前博客中可翻看如何安装,最简单的就是pip install pymysql 1.导入pymysql模块 import pymysq ...
- Python(socket编程——1、理论)
Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机 ...
- mysql数据库从删库到跑路之mysql多表查询
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id ...
- Windows server 2003 伪静态配置方法
Windows server 2003 伪静态配置方法 先我们下载Rewrite伪静态组件到服务器,然后解压到D:\Rewrite下,解压后如下图: 提示:ReWrite组件所在目录要有网站所有者 ...
- MySQL数据库--练习
学生选课系统 设计表关系 创建表和插入数据 /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Ve ...
- 『NiFi 自定义 Processor 无法获取到 Logger』问题解决
一.概述 自定义的 Processor 继承了 AbstractProcessor,而 AbstractProcessor 继承了 AbstractSessionFactoryProcessor ,g ...
- C#打印类
using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using Sys ...
- 什么是“HTML”?HTML的“标记”是什么?
①文本标记语言 即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. ②HTML 标记标签 通常被称为 HTML 标签 (HTML tag). ③HTM ...
- SpringBoot入门学习(三)
基于第二讲,这一讲我们主要讲解包含以下内容 springBoot添加对freemarker的支持 使用@RestController处理ajax请求 使用@PathVariable注解获取url参数 ...