基于libcurl+libopenssl开源库编译出curl下载工具及代码集成curl功能

准备素材:

1. openssl的版本: openssl-1.1.1w.tar.gz

2.curl的版本:curl-8.4.0.tar.gz

目标:

1.编译出openssl库;

2.编译出curl可执行文件及库;

步骤一:先解压压缩包

tar -zxvf openssl-1.1.1w.tar.gz

tar -zxvf curl-8.4.0.tar.gz

步骤二:编译openssl

首先需要配置config:

CC=/home/desheng/asj/ts-sdk/prebuilts/host/gcc/gcc-ts-10.3-2023.2-x86_64-arm-none-linux-uclibcgnueabihf/bin/arm-ts-linux-uclibcgnueabihf-gcc ./config no-asm no-shared no-async --prefix=/home/desheng/asj/libopenssl-out

CC就是编译器的路径, --prefix就是编译出的库文件及可执行文件存放的位置;no-shared表示编译出静态库

no-asm
                   Do not use assembler code. This should be viewed as
                   debugging/trouble-shooting option rather than production.
                   On some platforms a small amount of assembler code may
                   still be used even with this option.

  no-async
                   Do not build support for async operations.

再执行make;由于使用的是32bit的编译器,因此makefile里面产生的-m64需要去掉一下,等待编译完成后再安装,执行make install;

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/edsam49原创,转载请注明出处,谢谢!
/*****************************************************************************************************/

步骤三:编译curl库

首先还是需要配置:

CPPFLAGS="-I/home/desheng/asj/libopenssl-out/lib/ -I/home/desheng/asj/libopenssl-out/include" LDFLAGS="-L/home/desheng/asj/libopenssl-out/lib" LIBS="-ldl -lssl -lcrypto" ./configure --host=arm-linux CC=/home/desheng/asj/ts-sdk/prebuilts/host/gcc/gcc-ts-10.3-2023.2-x86_64-arm-none-linux-uclibcgnueabihf/bin/arm-ts-linux-uclibcgnueabihf-gcc CXX=/home/desheng/asj/ts-sdk/prebuilts/host/gcc/gcc-ts-10.3-2023.2-x86_64-arm-none-linux-uclibcgnueabihf/bin/arm-ts-linux-uclibcgnueabihf-g++ --with-ssl --enable-static --disable-dict --disable-ftp --disable-imap --disable-ldap --disable-ldaps --disable-pop3 --disable-proxy --disable-rtsp --disable-smtp --disable-telnet --disable-tftp --disable-zlib --without-ca-bundle --without-gnutls --without-libidn --without-librtmp --without-libssh2 --without-nss --without-zlib --prefix=/home/desheng/asj/libcurl-out/

指定好openssl的头文件,库路径,编译器CC的全路径,CXX也配置上,其他就是一些小配置,--prefix是库文件和可执行文件输出的地方;

配置好,执行make,再执行make install,等待完成即可;

步骤四:放到板子上去跑一下curl

笔者把curl产生的文件都拷贝到SD卡里去,然后去执行,

这样curl工具我们就制作好,可以直接使用了。

如果需要编程的来写下载程序的,可以调用curl的接口

int httpsApiDownloadFile(char *strURL, char *strFileName, https_download_progress_cb progress_cb, https_download_writedata_cb writedata_cb)
{int ret = -1;if(NULL == strURL) {return ret;}log_d("download %s > %s", strURL, strFileName);CURL *download_handle;CURLcode imgresult;FILE *fp = NULL;download_handle = curl_easy_init();if(download_handle) {fp = fopen(strFileName, "w+");if( fp == NULL ) {log_e(" File cannot be opened ! \n");curl_easy_cleanup(download_handle);return ret;}log_d(" File %s be opened ! \n", strFileName);curl_easy_setopt(download_handle, CURLOPT_URL, strURL);curl_easy_setopt(download_handle, CURLOPT_TIMEOUT, 100);curl_easy_setopt(download_handle, CURLOPT_USE_SSL, CURLUSESSL_ALL);curl_easy_setopt(download_handle, CURLOPT_SSL_VERIFYHOST, 0);curl_easy_setopt(download_handle, CURLOPT_SSL_VERIFYPEER, 0);
//      curl_easy_setopt(download_handle, CURLOPT_POST, 0);curl_easy_setopt(download_handle, CURLOPT_WRITEDATA, fp);curl_easy_setopt(download_handle, CURLOPT_NOSIGNAL, 1);curl_easy_setopt(download_handle, CURLOPT_FOLLOWLOCATION, 1);if(writedata_cb != NULL) {curl_easy_setopt(download_handle, CURLOPT_WRITEFUNCTION, writedata_cb);} else {curl_easy_setopt(download_handle, CURLOPT_WRITEFUNCTION, httpsDownloadWriteCb);}if(progress_cb != NULL) {curl_easy_setopt(download_handle, CURLOPT_NOPROGRESS, 0);curl_easy_setopt(download_handle, CURLOPT_PROGRESSFUNCTION, progress_cb);//设置进度回调函数} else {curl_easy_setopt(download_handle, CURLOPT_NOPROGRESS, 1);}imgresult = curl_easy_perform(download_handle);if(CURLE_OK != imgresult) {log_w("Cannot grab the File! \n");log_w("curl_easy_perform() failed:(%d) %s\n", imgresult, curl_easy_strerror(imgresult));ret = -1;} else {ret = 0;}fflush(fp);fclose(fp);}curl_easy_cleanup(download_handle);return ret;
}

用代码调用curl接口来下载,可以实时获取进度,更好掌控一点。当然根据自己项目需要来完成吧!怎么方便怎么来。

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

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

相关文章

魔术《4 Kings 折纸》的三重境界(四)——魔术效果的突破

‍ ‍早点关注我,精彩不错过! 在前三篇文章里,我们解释清楚了分别基于奇偶性,集合和群论来解释《4 Kings 折纸》这个魔术的过程,详情请戳: 魔术《4 Kings 折纸》的三重境界(三)——群…

量化交易:传统小市值策略 VS AI市值策略

在BigQuant平台上可以快速开发股票传统策略和股票AI策略,今天拿市值因子来练手,看看两个策略在2015-01-01到2016-12-31这两年时间各自的收益风险情形。 市值因子是国内股票市场能够带来超额收益的alpha因子,已经被验证为长期有效的因子&…

ajax,axios,fetch

文章目录 ajax工作原理ajax发请求四个步骤创建xmlhttprequest对象设置请求方式设置回调函数发送请求 自封装ajax axiosaxios 特性如何用配置拦截器fetch 三者区别 ajax 工作原理 Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务…

调试/抓包工具

一、Fiddler【推荐window使用】 介绍:个人认为是 Windows 平台最好用的抓包工具; 下载:Fiddler | Web Debugging Proxy and Troubleshooting Solutions 使用方式:这一篇文章写的很全,认真看完就够用了 Fiddler 抓包工…

QtCreator开发环境的安装和配置

QtCreator开发环境的安装和配置 介绍下载与安装环境介绍示例新建工程示例程序 帮助模式Qt Designer(设计师)Qt Linguist(预言家)结论 介绍 Qt Creator是一个跨平台、完整的集成开发环境(IDE),专门用于Qt开发。它包含了完整的编辑器、调试器和…

H5ke11..--2其他界面也要提取我的locatStarage

获取浏览器里面的本地缓存 localStorage就是我们的浏览器缓存在哪都可以用,调用我们的locatStarage就行 下面代码是获取打印到我们的页面上 修改在我们另一个界面得到 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

酷柚易汛ERP - 权限设置操作指南

1、产品介绍 对系统的同事管理、角色管理、数据授权进行设置 1.1 同事管理 对当前系统添加同事账号&#xff0c;超级管理员不允许删除 1.2 角色管理 对当前系统添加角色&#xff0c;系统中可以设置多种角色&#xff0c;不同角色设置不同权限&#xff0c;方便添加同事时进行…

Linux嵌入式I2C协议笔记

硬件: 1.I2C结构 在一个SOC中有一个或者多个I2C控制器,一个I2C控制器可以连接一个或多个I2C设备。 I2C总线需要两条线,时钟线SCL和数据线SDA 2.I2C传输数据格式 开始信号(S):SCL为高电平时,SDA山高电平向低电平跳变,开始传送数据。结束信号(P):SCL为高电平时,SDA…

CI/CD -gitlab

目录 一、常用命令 二、部署 一、常用命令 官网&#xff1a;https://about.gitlab.com/install/ gitlab-ctl start # 启动所有 gitlab 组件 gitlab-ctl stop # 停止所有 gitlab 组件 gitlab-ctl restart # 重启所有 gitlab 组件 gitlab-ctl statu…

Maven依赖管理项目构建工具(保姆级教学---下篇)

对于Maven依赖管理项目构建工具的介绍&#xff0c;我们将其分为上篇和下篇。如果您对文章感兴趣&#xff0c;您可以在此链接中找到上篇详细内容&#xff1a; Maven依赖管理项目构建工具&#xff08;保姆级教学上篇&#xff09;-CSDN博客 一、Maven依赖传递和依赖冲突 1. …

Zabbix5.0部署及应用

环境 主机名 IP 类型server01192.168.134.165zabbix-serverserver02 192.168.134.166zabbix-agent 官方部署文档 1 .安装yum源 [rootserver01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-rel…

OpenAI 变天:Sam Altman 被踢出局,原 CTO 暂代临时 CEO

文章目录 灵魂人物 Sam Altman 离任 OpenAICEO 下台&#xff1a;OpenAI 也宫斗&#xff1f;个人简介 hello&#xff0c;大家好&#xff0c;我是 Lorin&#xff0c;一觉醒来科技圈发生了一件令人震惊的大事&#xff1a;Sam Altman 被踢出局&#xff0c;原 CTO 暂代临时 CEO。 灵…