【OpenSSL】VC编译OpenSSL

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.mzph.cn/news/81298.shtml

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

相关文章

HTML 学习笔记(基础)

它是超文本标记语言&#xff0c;由一大堆约定俗成的标签组成&#xff0c;而其标签里一般又有一些属性值可以设置。 W3C标准&#xff1a;网页主要三大部分 结构&#xff1a;HTML表现&#xff1a;CSS行为&#xff1a;JavaScript <!DOCTYPE html> <html lang"zh-…

SkyWalking快速上手(二)——架构剖析1

文章目录 介绍架构概述一、Agent组件介绍Agent的配置配置参数详解service_namesample_n_per_3_secsnamespacecollector.backend_service Agent的工作原理 二、Collector组件什么是Collector组件?Collector组件的配置配置Collector组件示例 总结 介绍 SkyWalking是一个开源的分…

使用 Feature Flags 实现数据库灰度迁移的监控与可观测性

作者&#xff1a;观测云与胡博 场景描述 很多企业会遇到数据库升级、或数据库迁移的情况&#xff0c;尤其是在自建数据库服务向云数据库服务、自建机房向云机房、旧数据库向新数据库迁移等场景。 然而&#xff0c;我们需要在整个移植过程中保证其稳定性、避免数据遗失、服务宕…

后端中间件安装与启动(Redis、Nginx、Nacos、Kafka)

后端中间件安装与启动 RedisNginxNacosKafka Redis 1.打开cmd终端&#xff0c;进入redis文件目录 2.输入redis-server.exe redis.windows.conf即可启动&#xff0c;不能关闭cmd窗口 &#xff08;端口配置方式&#xff1a;redis目录下的redis.windows.conf配置文件&#xff0c;…

【第四阶段】kotlin语言的定义类和field关键字学习

1.普通成员变量背后隐士代码 为什么在kotlin中是private 可以直接调用&#xff0c;隐式代码如下 package Kotlin.Stage4class Test54{var name"kotlin"/*背后做的事NotNullprivate String name"kotlin";public void setName(NotNull String name){this.na…

【项目经验】:elementui多选表格默认选中

一.需求 在页面刚打开就默认选中指定项。 二.方法Table Methods toggleRowSelection用于多选表格&#xff0c;切换某一行的选中状态&#xff0c;如果使用了第二个参数&#xff0c;则是设置这一行选中与否&#xff08;selected 为 true 则选中&#xff09;row, selected 详细…

LinkedList 源码分析

LinkedList 是一个基于双向链表实现的集合类。 LinkedList 插入和删除元素的时间复杂度 头部插入/删除&#xff1a;只需要修改头结点的指针即可完成插入/删除操作&#xff0c;因此时间复杂度为 O(1)。尾部插入/删除&#xff1a;只需要修改尾结点的指针即可完成插入/删除操作…

vue2 维护状态key的作⽤和原理

1. key定义 为了给 Vue ⼀个提示&#xff0c;以便它能跟踪每个节点的身份&#xff0c;从⽽重⽤和重新排序现有元素&#xff0c;你需要为每项提供⼀个唯⼀ key 2. 写法 <li v-for"(item,index) in obj" :key"item.id">{{item.name}}</li>3. …

2024字节跳动校招面试真题汇总及其解答(五)

17.TCP的拥塞控制 TCP 的拥塞控制是指在 TCP 连接中,发送端和接收端通过协作来控制网络中数据包的流量,避免网络拥塞。TCP 的拥塞控制是 TCP 协议的重要组成部分,它可以确保 TCP 连接的稳定性和可靠性。 TCP 的拥塞控制主要有以下几个目的: 防止网络拥塞:当网络中的数据…

core文件的生成与使用

目录 core 设置例子 1例子 2core 名称及目录修改参考 在使用嵌入式系统时&#xff0c;出错后&#xff0c;不好使用 gdb 调试&#xff0c;这时&#xff0c;可让系统生成一个 core 文件&#xff0c;用于查看出错原因 core 设置 要生成 core 文件&#xff0c;需要先设置 core 文…

数据分析的概念

一、数据分析的目的&#xff1a;把隐藏在一大批看来杂乱无章的数据中的信息集中和提炼出来&#xff0c;从而找出研究对象的内在规律。&#xff08;主要在于分析目的及过滤脏数据&#xff09; 1.数据分析是有组织有目的地收集数据、分析数据&#xff0c;使之成为信息的过程。&a…

JDK18特性

文章目录 JAVA18概述1. 默认UTF-8字符编码2. 简单的Web服务器3.JavaDoc的增强4. 反射功能的新特性5.Vector API(三次孵化)6. 互联网地址解析SPI7. 外部函数和内存API(二次孵化)8.switch 表达式 JAVA18概述 Java 18 在 2022 年 3 月 22 日正式发布&#xff0c;Java 18 不是一个…

论文阅读之Learning and Generalization of Motor Skills by Learning from Demonstration

论文阅读其实就是用自己的话讲一遍&#xff0c;然后理解其中的方法 0、论文基本信息 为什么阅读此篇论文&#xff1a;因为它是DMP经典论文&#xff0c;被引多次&#xff0c;学史可以明智&#xff0c;了解最初机理。 论文题目&#xff1a;Learning and Generalization of Moto…

【Java 基础篇】Java字节字符流详解:轻松读写文本与二进制数据

在Java编程中&#xff0c;对文件和数据的读写操作是非常常见的任务。为了满足不同需求&#xff0c;Java提供了多种流类来处理输入和输出。本篇博客将详细介绍Java中的字节流和字符流&#xff0c;以及它们的使用方法&#xff0c;帮助初学者更好地理解和运用这些流来处理文件和数…

opencv形状目标检测

1.圆形检测 OpenCV图像处理中“找圆技术”的使用-图像处理-双翌视觉OpenCV图像处理中“找圆技术”的使用,图像处理,双翌视觉https://www.shuangyi-tech.com/news_224.htmlopencv 找圆心得&#xff0c;模板匹配比霍夫圆心好用 - 知乎1 相比较霍夫找直线算法&#xff0c; 霍夫找…

RabbitMQ常见问题

一、RabbitMQ如何保证消息不丢失&#xff1f; 这是面试时最喜欢问的问题&#xff0c;其实这是个所有MQ的一个共性的问题&#xff0c;大致的解 决思路也是差不多的&#xff0c;但是针对不同的MQ产品会有不同的解决方案。而RabbitMQ 设计之处就是针对企业内部系统之间进行调用设…

【Linux入门】---Linux权限管理详解

文章目录 1.shell命令以及运行原理2.linux用户分类su指令切换用户 3.Linux权限管理3.1Linux文件访问者3.2文件类型和访问权限3.3文件权限值的表示方法3.4文件访问权限的相关设置方法chmod指令--权限修改方法①chmod指令--权限修改方法②chown指令chgrp指令umask指令file指令 4.…

基于SpringBoot的电影购票系统

基于SpringBootVue的电影购票系统、影视商城管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 管理员&#xff1a;个人…

Unity 安装及运行MLAgents

1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…

sql order by 排序 null值放最后,怎么写

在 SQL 中&#xff0c;可以使用 ORDER BY 子句对结果进行排序。如果要将 NULL 值放在最后&#xff0c;可以在排序列中使用 CASE 表达式来处理。 下面是一个示例查询&#xff0c;将 NULL 值放在最后进行排序&#xff1a; SELECT column1, column2 FROM your_table ORDER BY CAS…