首页 > 系统相关 >【C++开源库】Windows 下编译 libcurl 库

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

时间:2023-07-12 15:13:24浏览次数:46  
标签:nmake lib 编译 Windows C++ libcurl easy curl

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 源代码。下载方式:

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

下面介绍 3 种编译方法:

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 中选择 /MDdConfigurations: 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;
}

Reference

标签:nmake,lib,编译,Windows,C++,libcurl,easy,curl
From: https://www.cnblogs.com/RioTian/p/17547527.html

相关文章

  • C++ 数据封装
     所有的C++程序都有以下两个基本要素:程序语句(代码):这是程序中执行动作的部分,它们被称为函数。程序数据:数据是程序的信息,会受到程序函数的影响。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装......
  • C++ 接口(抽象类)
     接口描述了类的行为和功能,而不需要完成类的特定实现。C++接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。https://www.lekaowang.com/cfa/oitt/......
  • C++计算机学院2023年度小学期编程实践课程(图书管理系统)[2023-07-12]
    C++计算机学院2023年度小学期编程实践课程(图书管理系统)[2023-07-12]计算机学院2023年度小学期编程实践课程上机实验题目(一)基于学生结构体数组的图书管理系统(40分)定义学生结构体类型的数组,静态初始化学生信息(不包括借书信息)。图书使用二维字符数组或字符指针数组单独......
  • C++ 傅里叶频谱的计算以及应用
    一维傅里叶频谱的计算#include<stdio.h>#include<math.h>#definepi3.1415926#definerows3#definecolums5typedefstruct{floatre;//reallyfloatim;//imaginary}complex,*pcomplex;complexcomplexadd(complexa,complexb)//复数加......
  • windows事件查看器之安全事件ID汇总
    windows事件查看器之安全事件ID汇总EVENT_ID安全事件信息1100-----事件记录服务已关闭1101-----审计事件已被运输中断。1102-----审核日志已清除1104-----安全日志现已满1105-----事件日志自动备份1108-----事件日志记录服务遇到错误4608-----Windows正在启动4609......
  • Qt/C++音视频开发46-音视频同步保存到MP4
    一、前言用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这些个复杂情况的出现,可......
  • windows端口
    1.查看当前占用端口情况1.命令行输入netstat-ano2.资源监视器,网络选项卡2.查看特定端口是否被占用netstat-ano|findstr:123453.查看特定进程的详细信息,假设进程ID是6789tasklist|findstr67894.杀死特定进程,假设进程ID是6789taskkill/F/PID6789 ......
  • 编程基础——计算机、程序和C++语言简介
    编程(programming)的意思是创建(或开发)软件,软件也称为程序(program)。软件是一个包含指令的集合,这些指令告诉计算机,或者计算设备,应该做什么。软件设计者使用一种强大的工具——程序设计语言(programminglanguage)开发出这些软件。没有最棒的编程语言,一种编程语言在某些情况下可......
  • C++面试八股文:知道std::unordered_set/std::unordered_map吗?
    C++面试八股文:知道std::unordered_set/std::unordered_map吗?某日二师兄参加XXX科技公司的C++工程师开发岗位第27面:面试官:知道std::unordered_set/std::unordered_map吗?二师兄:知道。两者都是C++11引入的新容器,和std::set和std::map功能类似,key唯一,unordered_map的value可变。......
  • c++ day7
    今天还是来理解空间复杂度其实就是开摆一天当讨论空间复杂度时,我们可以通过具体的代码示例来说明不同情况下的空间复杂度。示例1:常数空间复杂度O(1)voidprintNumber(intnum){intcount=0;//常数级别的额外空间for(inti=0;i<num;i++){......