openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)

news/2024/11/22 22:15:28/

文章目录

    • openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)
    • 概述
    • 笔记
    • 备注
    • 备注
    • END

openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)

概述

将openssl3.2编译出来了(openssl3.2 - 编译)
安装后的openssl.exe可以干openssl3.2所有的事情, 用openssl.exe 加上各种参数来完成具体的功能.
如果想迁移openssl.exe的功能到自己工程, 就要知道openssl.exe命令行的实现, 如果能用VS单步调试, 那就太舒服了.
这时, 如果编译一个openssl.exe的VS工程, 那最适合不过了.

在网上找了一下, 没人这么搞…
都是拿openssl.exe直接干活去了? 还是直接看官方的demo工程将需要的功能摘出来?

明显看官方的openssl.exe工程来的直接啊.

我这里用VS2019, 建立一个控制台工程, 将openssl.exe的源码进行重建.
里面有个小坑, windows.h和winsock2.h同时包含有冲突, 通过实验, 琢磨了半天才发现是这个小问题(以前遇到过这个问题).

笔记

建立一个VS2019控制台工程, 工程名称为my_openssl_cmd. 将模板工程生成的.cpp删掉, 成为一个空工程.
解决方案选择DebugX64
工程根目录下建立一个文件夹 openssl_3d2_x64, 将编译好的openssl-3.2.0源码目录中的apps目录, include目录拷贝进入.
删掉不用的东西如下:
删掉 openssl_3d2_x64\apps\demoSRP 子目录
删掉 openssl_3d2_x64\include\openssl 子目录
只保留openssl_3d2_x64 目录中*.c, *.h, *.rc, 其他都删掉.
在这里插入图片描述

在工程过滤器中, 建立相应的过滤器目录名称, 和openssl_3d2_x64目录中的子文件夹对应.
在这里插入图片描述

在VS2019工程中, 将文件都加入对应的过滤器.
添加工程的头文件路径

.;C:\openssl_3d2\include\;.\openssl_3d2_x64\apps;.\openssl_3d2_x64\apps\include;.\openssl_3d2_x64\include\;

设置工程库路径

C:\openssl_3d2\lib

工程预处理器 加入 _CRT_SECURE_NO_WARNINGS

在工程中查找 include <winsock2.h>, 在这行下面包含windows.h
在工程中查找 #include <windows.h>, 在这行上面包含winsock2.h
统一的包含winsock2.h, windows.h如下

		#include <winsock2.h>#include <windows.h>

在openssl.c的头文件包含后面, 加入库包含

#pragma comment(lib, "libcrypto.lib")
#pragma comment(lib, "libssl.lib")#include <openssl/applink.c> /*! for OPENSSL_Uplink(00007FF8B7EF0FE8,08): no OPENSSL_Applink */#pragma comment(lib, "ws2_32.lib")

在VS2019中, 将apps\lib\engine.c改名为engine_lib.c
在这里插入图片描述
在工程选项中禁用特定警告 : 4267;4090;4244;

上面做的这些编译改动, 都是编译 报错或有编译警告, 才加上的.
发现编译错误或者警告, 就加编译选项或者去稍微改一下代码中关于编译的部分.

最后全部编译一次. 编译完成, 0错误, 0警告.
在这里插入图片描述
将安装好的openssl的2个DLL, 放到编译出的my_openssl_cmd.exe的同级目录, 试试是否能正常运行?
在这里插入图片描述
可以正常运行.

备注

这下就爽飞了, 如果openssl能带参数干啥活(正好咱工程中也需要 😛 ), 直接用VS2019带着工程(带同样的命令行参数)跑起来, 单步调试, 就知道具体实现了.
然后就是整理一下openSSL.exe的实现到自己工程中. 作为研发, 移植(抄代码)这事, 大家都熟 😛

备注

openssl.exe干活是需要环境变量的, 和普通命令行程序调试不太一样.
如果不设置环境变量(告诉openssl该使用怎样的配置文件), openssl干活会失败.
已经做了笔记(openssl3.2 - 在VS2019下源码调试openssl.exe)

END


http://www.ppmy.cn/news/1302411.html

相关文章

OSG StatsHandler 初步学习

osg为视景器的使用和调试提供了丰富的辅助组件&#xff0c;它们主要是以osg::ViewerBase的成员变量或交互事件处理器(osgGA::GUIEventHandler)的形式出现。osgViewer::StatsHandler、osg::Stats类就是其中的两个经常用到的辅助组件。 #include<osgViewer/Viewer> #inclu…

SpringSecurity入门demo(三)多用户身份认证

WebSecurityConfigurerAdapter配置文件在 configure(AuthenticationManagerBuilder auth) 方法中完成身份认证。前面的demo都只有一个用户&#xff0c;security中使用UserDetailsService做为用户数据源 &#xff0c;所以可以实现UserDetailsService 接口来自定义用户。实现方…

学生成绩录入及查询(结构体)

学生成绩表中&#xff0c;一名学生的信息包含如下信息&#xff1a; 学号(11位)、姓名、数学成绩、英语成绩、程序设计成绩、物理成绩。 本题要求编写程序&#xff0c;录入N条学生的信息&#xff0c;并且按查询要求显示学生成绩等信息。 输入格式: 输入在第一行给出正整数N(N…

Maya参考图的导入和层的应用

参考视频&#xff1a;08.参考图的导入和层的应用_哔哩哔哩_bilibili 前视图/右视图模式下导入图形 创建图层 锁定后可以避免图片位置的移动 前视图和右视图要根据参照物对齐 与模型保持一定距离&#xff0c;同时把该参照图添加到图层中 模型可以添加到图层2中

华为机试真题实战应用【赛题代码篇】-找车位(附Java、python和C++代码)

目录 题目描述 解题思路 代码实现 C++ 代码2 python 代码2 Ja

2023年全国职业院校技能大赛应用软件系统开发赛项(高职组)赛题第6套

竞赛说明 一、项目背景 党的二十大报告指出&#xff0c;要加快建设制造强国、数字中国&#xff0c;推动制造业高端化、智能化、绿色化发展。《IDC中国制造企业调研报告&#xff0c;2021》报告指出&#xff0c;制造执行系统&#xff08;MES&#xff0c;Manufacturing Executio…

Tomcat源码解析(一): Tomcat整体架构

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a; Tomcat整体架构 目录 一、Tomcat整体架构1、Tomcat两个核心组件功能2、Tomcat支持的多种I/O模型和应用层协议 二、Connector连接器1、连接器功能汇总2、ProtocolHandler组件2.1、Endpoint2.2、Processor 3、Adapter组件 三…

生物信息学中的可重复性研究

科学就其本质而言&#xff0c;是累积渐进的。无论你是使用基于网络的还是基于命令行的工具&#xff0c;在进行研究时都应保证该研究可被其他研究人员重复。这有利于你的工作的累积与进展。在生物信息学领域&#xff0c;这意味着如下内容。 工作流应该有据可查。这可能包括在电脑…