人间工作P 人间工作P
主站 (opens new window)
首页
  • Bukkit开发教程
投喂
关于
  • 分类
  • 标签
  • 时间线
  • 友情链接

人间工作P

我每天都好困… 最近在学习和进行 VOCALOID 创作
主站 (opens new window)
首页
  • Bukkit开发教程
投喂
关于
  • 分类
  • 标签
  • 时间线
  • 友情链接
  • Windows 下编译 libcurl 全流程

    • 前言
      • 准备
        • 编译
          • 在 Visual Studio 导入依赖
          MrXiaoM
          2024-11-09
          C
          目录

          Windows 下编译 libcurl 全流程

          文档好多好杂,看不过来

          # 前言

          最近需要静态编译的 libcurl.lib,嵌入到我的 C++ 程序里面,但是好像发行版没有 .lib 提供,只能自己编译了。

          curl 的文档又多又杂,读起来挺麻烦的,很多时候不知道该到哪里找文档。

          # 准备

          首先到 curl 官网 (opens new window) 下载源代码 (Source Archives),解压到任意位置。

          然后打开 Visual Studio 的开发者命令提示符,有以下几种方法可以打开

          • 使用 Windows Terminal(终端)打开
          • 在 Visual Studio 的 工具(T) -> 命令行(L) -> 开发者命令提示(C) 打开
          • 打开文件 "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"

          打开之后 cd 到解压的 curl 源码目录下的 winbuild 目录,你也注意到这个目录下有个 README.md 文件,这是在 Windows 下编译 curl 的帮助文档。

          注意,使用开发者命令提示符是很重要的一件事,否则你会找不到 nmake 命令。

          # 编译

          在开发者命令提示符执行以下命令即可编译 libcurl,注意一定要进入开发者命令提示符!

          nmake /f Makefile.vc mode=static RTLIBCFG=static VC=17 MACHINE=x64 DEBUG=no
          
          1
          • mode=static 相当于静态编译,生成 .lib 文件;反之使用 mode=dll 生成 .dll 文件。
          • RTLIBCFG=static 相当于链接时使用 /MT 或 /MTd 参数 (CRT 静态链接)。
          • MACHINE 可选 x64,x86,arm64。DEBUG 不解释。

          VC 版本与 Visual Studio 版本对应关系如下

          Visual Studio 2008, VC=9
          Visual Studio 2010, VC=10
          Visual Studio 2012, VC=11
          Visual Studio 2013, VC=12
          Visual Studio 2014, VC=13
          Visual Studio 2015, VC=14
          Visual Studio 2017, VC=15
          Visual Studio 2019, VC=16
          Visual Studio 2022, VC=17
          
          1
          2
          3
          4
          5
          6
          7
          8
          9

          编译后的文件会出现在

          builds/libcurl-vc17-x64-release-static-ipv6-sspi-schannel/lib/libcurl_a.lib
          
          1

          配置不相同,目录也不相同,总之都在 builds 文件夹里。

          如果需要添加 SSL 支持等等,请翻阅 winbuild/README.md 说明文件,我不需要,就不另外研究了。

          # 在 Visual Studio 导入依赖

          假如编译目录在 builds/libcurl-vc17-x64-release-static-ipv6-sspi-schannel/

          在项目属性进行如下编辑(添加目录不用那么死板,也可以将文件夹复制到项目目录再操作)

          • 转到 C/C++ -> 常规 -> 附加包含目录,将编译目录中的 include 目录添加进去。
          • 转到 C/C++ -> 预处理器 -> 预处理器定义,添加一项 CURL_STATICLIB。
          • 转到 链接器 -> 常规 -> 附加库目录,将编译目录中的 lib 目录添加进去。
          • 转到 链接器 -> 输入 -> 附加依赖项,添加一项 libcurl_a.lib。
          • 转到 链接器 -> 输入 -> 忽略特定默认库,添加一项 MSVCRT.lib。

          然后你就可以愉快地使用 libcurl 啦

          #include "curl/curl.h"
          #pragma comment(lib, "libcurl_a.lib")
          
          void main()
          {
            CURL* curl;
            CURLcode res;
            curl_global_init(CURL_GLOBAL_DEFAULT);
            curl = curl_easy_init();
            if (curl) {
              curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1");
              // TODO: do what you want here.
              res = curl_easy_perform(curl);
              curl_easy_cleanup(curl);
            }
            curl_global_cleanup();
          }
          
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          编辑 (opens new window)
          #C语言#Windows
          上次更新: 2025/04/03, 23:23:45
          最近更新
          01
          记一次从 Sonatype OSSRH 迁移到 Maven Central Publishing Portal
          04-24
          02
          构建 Paper 衍生服务端(Purpur、Folia 等)时使用代理避免拉取失败
          02-24
          03
          Gradle 杂交不同编译目标(Java)的模块到一个jar
          01-29
          更多文章>
          Theme fork from Vdoing | Copyright © 2018-2025 人间工作P | 友情链接
          • 跟随系统
          • 浅色模式
          • 深色模式
          • 阅读模式