【C++开源库】Windows 下编译 libcurl 库
What is libcurl ?
libcurl 是一个跨平台的网络协议库,支持 http, https, ftp, gopher, telnet, dict, file, 和 ldap 协议。libcurl 同样支持 HTTPS 证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP 基本表单上传,代理,cookies 和用户认证。想要知道更多关于 libcurl 的介绍,可以到官网 http://curl.haxx.se/上去了解,在这里不再详述。
How install libcurl with Windows and VS2013 ?
libcurl 没有提供编译好的库,需要自己编译,先下载 libcurl 源代码。下载方式:
- Github 页面:https://github.com/curl/curl
- Libcurl 官网:https://curl.haxx.se/download.html
笔者这里选择官网下载,下载最新版本为 curl-7.67.0,我是 Windows 平台,所以选 zip 文件。
下面介绍 3 种编译方法:
- nmake 编译,想了解 cmake 与 nmake 的区别可以参考:5分钟理解make/makefile/cmake/nmake
- CMake 编译,请参考:libcurl库源码编译,安装c++
- 使用源码自带的 .sln 编译,具体步骤可参考:【C++】VS2013下CURL编译及使用示例 【C++】VS2015 sspi + libcurl7.64.0 编译
nmake 编译
(1)下载完成后解压,并进入文件夹,运行buildconf.bat。
(2)在开始菜单中找到 Visual Studio 2019 文件夹,编译 64 位则右击 x64 Native Tools Command Prompt for VS 2017/2019,编译 32 位则右击 x86 Native Tools Command Prompt for VS 2017/2019,选择管理员方式运行。
(3)进入 curl 文件夹中的 winbuild 文件夹。
(4)2019 + x64 + release + 静态编译:
nmake /f Makefile.vc mode=static VC=15 MACHINE=x64 DEBUG=no
- 如需动态编译,将 mode=static 改为 mode=dll。(本文仅演示静态编译,同时 curl 官方也不建议使用动态编译)
- 如需编译为 x86,将 MACHINE=x64 改为 MACHINE=x86。
- 如需编译为debug版,将DEBUG=no改为DEBUG=yes。
- 如果你是 VS2019,VC=15 建议改为 VC=14。
- 更详细的编译指令及说明可以打开 winbuild 文件夹中的
BUILD.WINDOWS.txt查看。
(5)回车,等待编译完成,关闭控制台界面。编译出的库路径为 C:\Users\xianf\Downloads\curl-7.76.1\builds\libcurl-vc15-x64-release-static-ipv6-sspi-schannel。
详细图文教程请参考:Visual Studio(VS2017/VS2019)编译并配置C/C++-libcurl开发环境
nmake 是 Microsoft Visual Studio 中的附带命令,需要安装 VS,即 Windows 上的 make。
如果不了解各个 VS 命令提示工具的区别,可以去看:VS 命令提示工具
Project Setting
(1)新建一个项目。本文选择新建一个名为 Test 的空项目,修改为 Release + x64 配置;
(2)配置 include 和 lib 路径,将以下 lib 添加至工程:
libcurl_a.lib
Ws2_32.lib
Wldap32.lib
winmm.lib
Crypt32.lib
Normaliz.lib
(3)属性 -> 高级 -> 字符集下拉框,使用多字节字符集;
(4)本文使用了静态编译,所以需要将 CURL_STATICLIB 添加至工程;
(5)本文使用了静态编译且没有编译 debug 版 libcurl,所以直接在 Configurations: All Configurations 中将 Runtime Library 选择为 /MD。
- 如果编译了 debug 版 libcurl,请分别在
Configurations: Debug中选择/MDd、Configurations: Release中选择/MD。 - 如果使用了动态编译,则为
/MTd和/MT。
Code Test
#include <curl/curl.h>
int main(int argc, char* argv[]) {
CURL* curl = nullptr;
CURLcode res;
curl = curl_easy_init();
if (curl != nullptr) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.baidu.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
libcurl cmake complie
如果要使用 libcurl 库进行编译,需要先安装 libcurl 库并配置环境变量。之后在 CMakeLists.txt 文件中添加如下内容:(此时下载最新的即可,无需编译)
find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIRS})
target_link_libraries(your_target ${CURL_LIBRARIES}) # 其中,your_target 是你的目标程序名称。
然后,使用 CMake 进行编译。在命令行中运行:
cmake .
make
这将在当前目录下生成可执行文件。
如果需要更具体的步骤,建议参考 libcurl 和 CMake 官方文档.
Reference
- https://zhuanlan.zhihu.com/p/576968545
- VS2013 下可以用的参考
- https://cloud.tencent.com/developer/article/1557454
- https://blog.csdn.net/bangtanhui/article/details/121712032
【C++开源库】Windows 下编译 libcurl 库的更多相关文章
- windows 下编译libcurl
因为linux平台采用了libcurl,有一个程序移植到到windows平台,再linux采用libcurl.在windows下准备也采用该库.在网上搜索了几位同行写的,步骤上面有缺失. 本文将以详细 ...
- windows下编译Boost库
下载源码 boost_1_66_0.7z 生成编译工具 D:\Project\boost_1_66_0> bootstrap.bat 配置Python环境变量(使用VS2017自带的32位pyt ...
- windows下编译和安装boost库
boost是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库. 获取方式 boost提供源码形式的安装包,可以从boost官方网站下载,目前最新版本是1.59.0. 本机上正好有boos ...
- 如何在WINDOWS下编译BOOST C++库 .
如何在WINDOWS下编译BOOST C++库 cheungmine 2008-6-25 写出来,怕自己以后忘记了,也为初学者参考.使用VC8.0和boost1.35.0. 1)下载boost ...
- 分布式版本库——Windows下Git的环境部署以及在GitHub上开源自己的项目
分布式版本库--Windows下Git的环境部署以及在GitHub上开源自己的项目 这几天着实忙的焦头烂额,可惜不是搞技术,今天周日,难得闲下来,写篇大家都想学习的Git教程,其实廖雪峰老师的网站已经 ...
- 在Ubuntu下编译Assimp库
在Ubuntu下编译Assimp库 怎样在Ubuntu下编译Assimp库?这是我曾经编译成功后做的笔记,供參考. 1.去以下的站点去下载Assimp库: http://assimp.sourcefo ...
- windows下python常用库的安装
windows下python常用库的安装,前提安装了annaconda 的python开发环境.只要已经安装了anaconda,要安装别的库就很简单了.只要使用pip即可,正常安装好python,都会 ...
- [转] Windows下编译OpenSSL
简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和TLS(Transport Layer Security)协议,被广泛企业应用所采用.对于一般的开发人 ...
- Windows下编译objective-C
Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode 目录 ...
- Windows下编译安装 FFmpeg
在Linux/Mac下编译 ffmpeg是非常方便的.但要在 Windows下编译 ffmpeg还真要花点时间.以下就是在 Windowns下编译ffmpeg的步骤: 一.安装Cygwin 在wind ...
随机推荐
- 嵌入式linux主机通过分区镜像生成固件,DD备份分区后打包成固件,px30刷机教程 ,rockchip刷机教程
我这边有一个工控路由器因为刷机变砖了,网上下载不到固件,自己暂时还没有搞过编译.我找到了同型号的路由器,把它的系统制作成镜像. 具体操作分为三步: 第一步,直接用DD命令备份了几个分区,分区我暂时还不 ...
- 运维初级实践——Linux系统命令教程
区块链运维工程师在Linux环境中常用的命令.快捷键,以及安装软件和文件管理的最佳实践. 1. 常用Linux命令 1.1 文件和目录操作 ls:列出目录内容 cd:更改目录 mkdir:创建新目录 ...
- 金蝶云星空与泛微OA集成的方案落地与实践
打破信息孤岛,泛微OA集成的方案落地与实践 在现代企业内部,不同类型的业务系统和泛微OA平台层出不穷.企业需要找到一种高效的方法来整合和协同这些多样化的系统,同时将它们与泛微OA平台融合,以实现资源整 ...
- JAVAweek8
编程,要学会将大问题逐渐分解成一个个小问题,逐步完成. 将整个程序分成若干个组件(分解) 将多次出现的相似功能设成独立的方法(模式识别.抽象.算法) 调试每个独立组件的健壮性(单元测试) 按照功能要求 ...
- 在模态窗口中控制窗口的隐藏和显示(.NET)
如果你创建了模态窗口,虽然一些API,例如Editor.GetSelection(),可以自动隐藏模式对话框,但如果从模态窗口出发与编辑器(编辑器指的模型空间,即你绘图的窗口)交互, 它会在GetSe ...
- 解密Prompt系列20. LLM Agent之再谈RAG的召回多样性优化
几个月前我们就聊过RAG的经典方案解密Prompt系列14. LLM Agent之搜索应用设计.前几天刚看完openAI在DevDay闭门会议上介绍的RAG相关的经验,有些新的感悟,借此机会再梳理下R ...
- 【总结】MySQL使用优化
一.表设计 1.避免使用null 占用额外空间.索引无效.检索麻烦 2.能用int 不用varchaer,能用varchaer 不用text 3.int 最好给默认值 0 .varchar empt ...
- [2020-2021 集训队作业] Tom & Jerry
题目背景 自选题 by ix35 题目描述 给定一张包含 \(n\) 个顶点和 \(m\) 条边的 无向连通图,Tom 和 Jerry 在图上进行了 \(q\) 次追逐游戏. 在第 \(i\) 次游戏 ...
- skywalking自定义插件开发
skywalking是使用字节码操作技术和AOP概念拦截Java类方法的方式来追踪链路的,由于skywalking已经打包了字节码操作技术和链路追踪的上下文传播,因此只需定义拦截点即可. 这里以sky ...
- 华企盾DSC由于proevhost.exe进程未添加导致rhino的文件无法预览
解决方法:用procmon监控文件目录,然后搜索readfile,查看除了explorer.dllhost.rentimebroker是否还有其它进程添加,查到proevhost进程也读取了文件添加加 ...