【OpenSSL】VC编译OpenSSL

news2024/10/6 6:43:49

VC编译OpenSSL

  • 编译工具准备
  • 编译OpenSSL
  • 建立`Hello World`工程
    • 创建VS工程

编译工具准备

  • 安装好Visual Studio
  • 安装Perl, 主要是用来生成nmake的。
  • 准备好汇编语言编译工具nasm,并添加到path路径。
  • 下载好Open SSL源代码。

编译OpenSSL

  • 安装Perl,并加入到path路径,检验标标准就是perl命令可用。

  • 检验nasm命令可用。

  • 选择VC编译的版本, 以VS 2022为例,可以选择多种编译方式,入下图
    在这里插入图片描述
    在这里插入图片描述

    • 其中x64 Native Tools Command Prompt for VS 2022表示使用64位编译64位的程序。
    • 其中x64_x86 Cross Tools Command Prompt for VS 2022 表示使用64的编译程序编译32位的程序。
    • 其中x86 Native Tools Command Prompt for VS 2022表示使用x86的编译工具编译32位的程序。
    • 其中x86_x64 Cross Tools Command Prompt for VS 2022 表示使用x86的编译工具编译64位的程序。
  • 选择其中一个编译方式,进入控制台,比如选择x86 Native Tools Command Prompt for VS 2022.
    编译模式

  • 生成nmake配置文件, 命令。

# 先进入到openssl 的源码目录中
perl Configure VC_WIN32

OpenSSL环境

  • 如果没有安装nmake 会出现提示, 直接使用perl的命令安装就好了。
ppm install dmake
  • 待安装好了nmake之后, 重新进行配置。
perl Configure VC_WIN32
  • 待配置文件执行完成之后, nmake的配置就生成好了。执行命令开始编译
nmake
  • 编译完之后可以直接install
nmake install 
  • 执行完之后,Open SSL 会被安装好,具体的安装目录可以查看makefile文件
# Do not edit these manually. Use Configure with --prefix or --openssldir
# to change this!  Short explanation in the top comment in Configure
INSTALLTOP_dev=C:
INSTALLTOP_dir=\Program Files (x86)\OpenSSL
OPENSSLDIR_dev=C:
OPENSSLDIR_dir=\Program Files (x86)\Common Files\SSL
LIBDIR=lib
MODULESDIR_dev=C:
MODULESDIR_dir=\Program Files (x86)\OpenSSL\lib\ossl-modules
ENGINESDIR_dev=C:
ENGINESDIR_dir=\Program Files (x86)\OpenSSL\lib\engines-3
!IF "$(DESTDIR)" != ""
INSTALLTOP=$(DESTDIR)$(INSTALLTOP_dir)
OPENSSLDIR=$(DESTDIR)$(OPENSSLDIR_dir)
ENGINESDIR=$(DESTDIR)$(ENGINESDIR_dir)
MODULESDIR=$(DESTDIR)$(MODULESDIR_dir)
!ELSE
INSTALLTOP=$(INSTALLTOP_dev)$(INSTALLTOP_dir)
OPENSSLDIR=$(OPENSSLDIR_dev)$(OPENSSLDIR_dir)
ENGINESDIR=$(ENGINESDIR_dev)$(ENGINESDIR_dir)
MODULESDIR=$(MODULESDIR_dev)$(MODULESDIR_dir)
!ENDIF
  • 等待命令执行完成之后, Open SSL就算编译安装完成了。 采用x86格式编译安装默认路径在C:\Program Files (x86)\OpenSSL

建立Hello World工程

  1. 建立一个Open SSL工作目录文件夹,例如ssl_code
  2. Open SSL目录下的bin lib include三个文件夹复制到ssl_code之下.
  3. 为了能支持不同的平台, 将目前的bin lib目录下在分别创建一个x86文件夹,并将对应的文件下移到x86文件夹下。
  4. 继续在ssl_code之下新建一个src文件夹存放源代码。
  5. 建立好的目录结构为
└─ssl_code
    ├─bin
    │  └─x86
    ├─include
    │  └─openssl
    ├─lib
    │  └─x86
    │      ├─engines-3
    │      └─ossl-modules
    └─src

创建VS工程

  1. 创建一个新项目.
    在这里插入图片描述
  • 选择空项目
  • 输入项目名称,选择位置位刚才的src目录
    在这里插入图片描述
  • 点击【创建】项目建立成功。
  • 在工程的源文件目录下添加一个hello_world.cpp文件.
  • 选中001_helloworld工程右键点击属性
    在这里插入图片描述
  • 在属性配置页面中选择C/C++, 在附加目录中配置../../inlude,制定头文件的路径.
    在这里插入图片描述
  • 因为目前编译的是x86格式的Open SSL, 所以这里的平台选择Win32
  • 点击【确定】完成配置。
  • 开始在hello_world.cpp文件中编写代码, 我们期望的是完成一个随机数的产生.

#include <iostream>
#include <openssl/rand.h>
#include <time.h>

using namespace std;

int main(int argc, char* argv[])
{
	cout << "First openssl code !" << endl;
	time_t  t = time(0);
	unsigned char buf[16] = { 0 };
	int re = RAND_bytes(buf, sizeof(buf));
	for (int i = 0; i < sizeof(buf); i++) 
	{
		cout << "[" << buf[i] << "]";
	}
	getchar();

	return 0;
}

  • 目前如果点击运行【CTRL+F5】/ F5是不可以的,原因是没有静态库,编译不能通过。
  • 首先需要在链接库上配置链接库的目录,根据项目的目录使用相对路径的形式,附加目录地址为../../lib/x86,如下图配置。
    在这里插入图片描述
  • 配置需要关联的静态库,我们需要使用的静态库为libcrypto.lib.

在这里插入图片描述

  • 此时如果之间点击运行会提示找不到对应的动态库libcrypto-3.dll
    在这里插入图片描述
  • 为了方便运行, 将生成的路径直接改到bin/x86目录下。 配置如下图输出目录改为../../bin/x86
    在这里插入图片描述
    同时把调试的工作目录也改为bin/x86下, 更改操作如下图所示.
    在这里插入图片描述
  • 此时再次点击运行即可正常运行了。运行结果如下图所示/
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA-Day18】用大白话讲解 Java 中的内存机制

标题 用大白话讲解 Java 中的内存机制摘要引言一、Java 内存机制1.1 栈内存1.2 堆内存 二、Java 如何管理内存三、合理管理内存的必要性与其他方式相比优势劣势建议四、总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《…

idea创建springboot项+集成阿里连接池druid

创建项目并集成流程 1&#xff1a;前提准备2&#xff1a;创建springboot项目流程3&#xff1a;集成阿里连接池步骤4&#xff1a;集成swagger方便测试5&#xff1a;书写增删改查进行测试6&#xff1a;项目gitee地址 1&#xff1a;前提准备 准备开发工具&#xff1a;idea java环…

UI自动化测试实践

一、设计背景 随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集…

Blazor前后端框架Known-V1.2.15

V1.2.15 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

Linux下的系统编程——守护进程、线程(十二)

前言&#xff1a; 我们知道进程拥有一个PCB&#xff0c;在Linux中被称为task_struct,并且有一个进程地址空间&#xff0c;也有一个页表&#xff0c;通过页表指向物理内存&#xff0c;但是从今天开始&#xff0c;对进程的概念可能发生变化&#xff0c;这个我们后边来说&#xf…

【微信小程序】项目初始化

| var() CSS 函数可以插入一个自定义属性&#xff08;有时也被称为“CSS 变量”&#xff09;的值&#xff0c;用来代替非自定义 属性中值的任何部分。 1.初始化样式与颜色 view,text{box-sizing: border-box; } page{--themColor:#ad905c;--globalColor:#18191b;--focusColor…

通过Vcpkg直接安装Qt静态链接免编译的方式

Vcpkg支持自动编译Qt静态链接版&#xff0c;大约只需要30min左右&#xff0c;解决编译困扰和配置环境带来的各种影响。 一、查找Qt包 https://vcpkg.io/en/packages 输入qt5可找到qt5版本&#xff0c;如果需要安装最新的qt6&#xff0c;可直接输入qt&#xff0c;如下: 二、修…

操作系统存储器章节知识梳理

&#x1f525;&#x1f525;宏夏Coding网站&#xff0c;致力于为编程学习者、互联网求职者提供最需要的内容&#xff01;网站内容包括求职秘籍&#xff0c;葵花宝典&#xff08;学习笔记&#xff09;&#xff0c;资源推荐等内容。在线阅读&#xff1a;https://hongxiac.com&…

关于阻抗不连续的原因

1、连线中的分支结构 信号传输到分支结构处&#xff0c;表现出的是两条电路并联的效果&#xff0c;会导致阻抗的不连续问题。典型的就是菊花链结构。 2、参考平面的宽度 一般情况下参考平面都是很宽且连续的&#xff0c;但有的时候&#xff0c;参考平面会被反焊盘给掏空…

FPGA/数字IC(芯海科技2022)面试题 2(解析版)

以下仅为学习参考(非原创)&#xff0c;如有疑惑欢迎评论区指出&#xff01; 一、单选题&#xff08;共20题&#xff0c;每题3分&#xff0c;共60分&#xff09; 1. D触发器&#xff1a;Tsetup3ns&#xff0c;Thold1ns&#xff0c;Tck2q1ns&#xff0c; 该D触发器最大可运行时…

笔记1.5:计算机网络体系结构

从功能上描述计算机网络结构 分层结构 每层遵循某个网络协议完成本层功能 基本概念 实体&#xff1a;表示任何可发送或接收信息的硬件或软件进程。 协议是控制两个对等实体进行通信的规则的集合&#xff0c;协议是水平的。 任一层实体需要使用下层服务&#xff0c;遵循本层…

Linux 下的 10 个 PDF 软件

本文[1]是我们正在进行的有关 Linux 顶级工具系列的延续&#xff0c;在本系列中&#xff0c;我们将向您介绍最著名的 Linux 系统开源工具。 随着互联网上越来越多地使用可移植文档格式 (PDF) 文件来获取在线书籍和其他相关文档&#xff0c;拥有 PDF 查看器/阅读器对于桌面 Linu…

Wireshark分析HTTPS流量

1、设置环境变量 &#xff08;在不抓包的时候要把这个环境变量删掉,日志太多可能&#xff09; # 变量名称 SSLKEYLOGFILE # 变量值&#xff1a;日志文件存储的路径 D:\data\ssl\keylog.log2、 配置配置Wireshark软件文件路径 配置上之后一定要重启&#xff0c;不重启没效果。

Math_2023_09_17.java

package homework;import util.StringUtil;/*** 八位数: 2 _ _ _ _ _ _ 5* 每相邻三个数字和为11** author ZengWenFeng* email 117791303qq.com* mobile 13805029595* date 2023.09.17*/ public class Math_2023_09_17 { public static boolean isOk(String str, int sum){in…

Apache Hive概述,模拟实现Hive功能,Hive基础架构

1、Apache Hive 概述 1.1、分布式SQL计算 对数据进行统计分析&#xff0c;SQL是目前最为方便的编程工具。 大数据体系中充斥着非常多的统计分析场景 所以&#xff0c;使用SQL去处理数据&#xff0c;在大数据中也是有极大的需求的。 MapReduce支持程序开发&#xff08;Java…

88 # express 应用和路由的分离

上一节实现了应用和创建应用的分离&#xff0c;这一节来实现应用和路由的分离 application.js const http require("http"); const Router require("./router");function Application() {this._router new Router(); }Application.prototype.get fun…

Learn Prompt-ChatGPT 精选案例:内容总结

ChatGPT 可以通过分析内容并生成一个浓缩版本来总结文本。这对节省时间和精力很有帮助&#xff0c;特别是在阅读长篇文章、研究论文或报告时。 通用总结​ 你所要做的就是把具体的文字复制并粘贴到提示中&#xff0c;并要求ChatGPT对所选文本进行简化总结。这里我们参考opena…

[尚硅谷React笔记]——第1章 React简介

目录&#xff1a; 第1章 React简介 React的基本使用:虚拟DOM的两种创建方式&#xff1a; 使用jsx创建虚拟DOM使用js创建虚拟DOM(一般不用)虚拟DOM与真实DOM:React JSX:JSX练习&#xff1a;模块与组件、模块化与组件化的理解 模块组件模块化组件化 第1章 React简介 中文官网: …

【微信小程序】关于页面中引入背景的两种方式

| 布局设计思路 <view class"about"> <view class"pubilcTitle"><view class"en"></view><view class"cn"></view><view class"line"></view> </view> <view cl…

linux基础(2)

目录 一.vi\vim编译器介绍1.三种模式2.vim的使用3.快捷键的使用 二.which&#xff0c;find命令三.grep命令四.wc命令五.管道符六.echo命令1.重定向符 七.tail命令 一.vi\vim编译器介绍 vim\vi是linux中最经典的文本编译器 同图形化界面中的文本编译器是一样的&#xff0c;vi是…