【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-…

使用 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;…

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

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

LinkedList 源码分析

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

core文件的生成与使用

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

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…

Linux基础指令(四)

目录 前言1. find & which 指令1.1 find1.2 which1.3 alias1.4 where 2、grep 指令3、xargs 指令结语&#xff1a; 前言 欢迎各位伙伴来到学习 Linux 指令的 第四天&#xff01;&#xff01;&#xff01; 在上一篇文章 Linux基本指令(三) 当中&#xff0c;我们学会了通过…

CDH集群初始化oozie失败表结构不存在

文章目录 1. 背景2. 初始化数据库2.1 生成表结构2.2 初始化数据库 3. CDH管理页面始化 oozie 服务 1. 背景 安装CDH 6.3.2 版本时初始化集群服务过程中出现oozie server启动失败的情况&#xff0c;第一次创建集群成功&#xff0c;第二次失败了&#xff0c;分析日志信息 SERVER…

使用ElementPlus实现内嵌表格和内嵌分页

前言 有时遇到这样的需求&#xff0c;就是在表格里面嵌入一个表格&#xff0c;以及要求带有分页&#xff0c;这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子&#xff0c;毕竟Vue3兼容Vue2语法&#xff0c;若想要Vue3版本例子&#xff0c;简单改改就OK了。 一…

快递、外卖、网购自动定位及模糊检索收/发件地址功能实现

概述 目前快递、外卖、团购、网购等行业 &#xff1a;为了简化用户在收发件地址填写时的体验感&#xff0c;使用辅助定位及模糊地址检索来丰富用户的体验 本次demo分享给大家&#xff1b;让大家理解辅助定位及模糊地址检索的功能实现过程&#xff0c;以及开发出自己理想的作品…

IDEA中创建Java Web项目方法2

以下过程使用IntelliJ IDEA 2021.3 一、创建Maven项目 1. File -> New -> Projects... 2. 选择Maven&#xff0c;点击Next 3. 输入项目名称&#xff0c;Name: WebDemo3。点击 Finish&#xff0c;生成新的项目 二、添加框架支持 1. 在项目名上右键&#xff0c;选择 A…

云服务部署:AWS、Azure和GCP比较

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…