【C++开源库】Windows 下编译 libcurl 库

摘要:
1、 简介libcurl是一个跨平台的网络协议库,支持http、https、ftp、gopher、telnet、dict、file和ldap协议。Libcurl还支持HTTPS证书授权、HTTP POST、HTTP PUT、FTP上载、HTTP基本表单上载、代理、cookie和用户身份验证。有关libcurl的更多信息,请访问官方网站http://curl.haxx.se/上去了解一下。我不在这里详述

一、简介

libcurl 是一个跨平台的网络协议库,支持 http, https, ftp, gopher, telnet, dict, file, 和 ldap 协议。libcurl 同样支持 HTTPS 证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP 基本表单上传,代理,cookies 和用户认证。想要知道更多关于 libcurl 的介绍,可以到官网 http://curl.haxx.se/上去了解,在这里不再详述。

二、编译 libcurl

libcurl 没有提供编译好的库,需要自己编译,先下载 libcurl 源代码。下载方式:

笔者这里选择官网下载,下载最新版本为 curl-7.76.1,我是 Windows 平台,所以选 zip 文件。

C___libcurl_A.png


下面介绍 3 种编译方法:

笔者原先使用 CMake 编译,最后生成了 libcurl.dll,但即使设置生成静态库,也没有生成 .lib,在网上查找生成 .lib 的方法,需要有链接器中配置,但源码工程中没有链接器一项,由于时间原因暂时没有深入研究下去。

也不推荐源码自带的 .sln 编译方法,因为 libcurl 依赖以下库(以下库版本为当前最新版本),还需要下载解压这些库,比较麻烦:

推荐使用第一种方式,笔者采用这种方法编译成功,下面详细介绍 nmake 编译方法。


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:UsersxianfDownloadscurl-7.76.1uildslibcurl-vc15-x64-release-static-ipv6-sspi-schannel

详细图文教程请参考:Visual Studio(VS2017/VS2019)编译并配置C/C++-libcurl开发环境


nmake 是 Microsoft Visual Studio 中的附带命令,需要安装 VS,即 Windows 上的 make。

如果不了解各个 VS 命令提示工具的区别,可以去看:VS 命令提示工具

三、配置工程

(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 中选择 /MDdConfigurations: Release 中选择 /MD
  • 如果使用了动态编译,则为 /MTd/MT

四、测试代码

#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
", curl_easy_strerror(res));
        }
        /* always cleanup */
        curl_easy_cleanup(curl);
    }

    return 0;
}

参考:

Visual Studio(VS2017/VS2019)编译并配置C/C++-libcurl开发环境


免责声明:文章转载自《【C++开源库】Windows 下编译 libcurl 库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇usaco1.51Number Triangles(数字三角形)mysql常用语句、命令(增删改查功能)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在Windows上采用Cmake+Visual Studio编译并使用静态opencv库并发布成裸机可执行程序

在Windows上采用Cmake + Visual Studio编译并使用静态opencv库并打包发布成裸机可执行程序 环境:Windows 7 64bit 工具 Cmake-3.11.1 确保是64位 确保安装了GUI Visual Studio 2015 确保是64位 确保采用vc14作为编译器(支持c++11标准部分语法) 原料:Op...

Win32编程day01 学习笔记

Win32 Windows编程  1 Windows编程基础 2 Windows文字的编码 3 窗口程序 4 窗口消息 5 菜单和加速键 6 绘图 7 对话框 8 基本控件  ..... 一 Windows编程基础  1 Win32应用程序的基本类型    1.1 控制台程序      不需要完善的Windows窗口,可以使用DOS窗口      的方式显...

值得推荐的C/C++框架和库 (真的很强大)

  值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。 下载链接:http...

ldd 以及 ld-linux.so.2

最近跟编译工具干上了,可能是问题积累集中爆发的结果。 今天对 ld-linux.so.x 有很大兴趣,想对它多些了解,遂百度之。发现了指令 ldd。 关于 ldd 其实 ldd 是一个脚本,并不是一个二进制文件。 它的原理很简单:当环境变量 LD_TRACE_LOADED_OBJECTS 不为空时,只显示依赖关系,不执行程序。我们可以手动试试。 ldd 开...

开源分布式文件系统比较

要使用分布式文件系统来降低成本,于是搜寻了开源的分布式文件系统。 经过安装部署和测试,把我使用中碰到的一些问题总结一下, 希望对大家有所帮助, 我也有一些问题没有搞懂,希望和大家一起交流,共同进步。 第一:CEPH 网上搜索了一些资料, 说 ceph 性能最高,C++编写的代码,支持Fuse,并且没有单点故障依赖, 于是下载安装, 由于 ceph 使用 b...

zbar配置

1、下载安装zbar,选择full全部安装。也可以从这里下载。  2、由于官方给的是32位的,继续下载64位的zbar 替换文件: 将ZBarWin64-master\lib 文件夹下 libzbar64-0.lib 文件复制到ZBar安装路径下的 lib 文件夹; 将 ZBarWin64-master\lib 文件夹下 libzbar64-0.dl...