编译libcurl with openssl + zlib (gzip)

2024-03-21 09:20
文章标签 编译 gzip zlib openssl libcurl

本文主要是介绍编译libcurl with openssl + zlib (gzip),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

libcurl 编译说明

libcurl 正常不依赖第三方库也可以进行编译使用,但是只能访问不带ssl通道的http,不能访问https,而且不支持gzip
一般现在常用的https中的ssl是使用openssl、gzip使用zlib
下面是如何编译libcurl,我们在项目中使用的是第二种方式,VC项目的方式。

zlib编译

cd $zlibdir
nmake -f win32/Makefile.msc
在这里插入图片描述

openssl编译

openssl 编译

构建编译环境

将openssl的include与lib和zlib的include与lib分别拷贝到curl平级目录中,类似下图中的目录结构,我这边编译是生成一个总的curl库,zlib与openssl以静态库的方式打包进libcurl的库中。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本地curl命令行编译

cd  $curldir/winbuild
nmake /f Makefile.vc mode=dll DEBUG=no ENABLE_UNICODE=yes WITH_SSL=static WITH_ZLIB=static ZLIB_PATH=D:\SevenWorkSpace\Curl_workspace\zlib SSL_PATH=D:\SevenWorkSpace\Curl_workspace\openssl

生成在
在这里插入图片描述

本地Curl VC项目编译

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

编译后生成在
在这里插入图片描述

总结与经验
经过对比和测试,这两种编译出来的库都可以正常进行使用,但是由于编译时输入的编译器参数不同,还是需要特殊进行考虑使用方式。
我这边之前的项目中是使用的第二种方式进行的编译,所以后续在这次添加gzip使用时没有使用第一种编译方式生成的库。
由于在网上找到的都是第一种方式编译出来的发现编译后的库文件比较小,如图:
在这里插入图片描述

对比了编译时的命令行,发现很多编译器相关的选项并不一致,并且实际命令行编译后的动态库会多一个调试标记,所以考虑再三还是延续老的方式(VC项目)进行编译。不过测试使用时两种编译方式编译出来的库都可以正常使用。
通过抓取命令行与实际VC项目中的编译选项,分析makefile中ZLIB相关的编译选项,
发现ZLIB源码端启用是多开启了三个宏定义
在这里插入图片描述

所以直接在VC项目中启用这三个宏即可

使用gzip

curl_easy_setopt(m_pcurl, CURLOPT_ACCEPT_ENCODING, “”);
使用此方法调用服务端时可以根据本地支持的压缩算法进行申请
如果本身libcurl编译时没有包含zlib
抓包时访问数据会是
在这里插入图片描述

如果使用包含zlib的libcurl库抓包数据为
在这里插入图片描述

如果服务端开启了gzip支持,则抓包会看到类似的返回效果
在这里插入图片描述

完结,C++真是麻烦。还有哪个语言还要自己考虑这些东西的。。。。

编程道路很漫长,且行且珍惜

这篇关于编译libcurl with openssl + zlib (gzip)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832320

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C