You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用Visual Build Tools编译支持HTTP2的libcurl的问题

Windows下使用Visual Build Tools编译支持HTTP2的libcurl解决方案

错误根因

从编译日志可以定位三个核心问题:

  • 你传入的NGHTTP2_PATH参数路径配置不符合libcurl winbuild Makefile的预期逻辑:Makefile会自动在你传入的NGHTTP2_PATH后拼接/include作为头文件搜索路径,你实际传入的路径已经到了includes层级,最终拼接出了不存在的includes/include路径,导致找不到头文件
  • 你的nghttp2头文件上层目录命名为includes(多了后缀s),和libcurl默认查找的include目录名不匹配
  • 你之前使用的DUSE_NGHTTP2=ON/OFF是无效参数,winbuild体系下开启HTTP2不需要手动加该参数,只需要指定WITH_NGHTTP2参数即可

解决步骤

方案1:调整目录结构适配默认规则(推荐)

  1. 将你nghttp2路径下的C:\Users\ball\Desktop\nghttp2\nghttp2-1.45.1\lib\includes文件夹重命名为include
  2. 执行以下编译命令:
nmake /f Makefile.vc mode=static vc=16 debug=no MACHINE=x64 WITH_NGHTTP2=static NGHTTP2_PATH="C:\Users\ball\Desktop\nghttp2\nghttp2-1.45.1\lib"

方案2:手动指定头文件和库路径(无需修改目录结构)

直接通过额外参数手动指定搜索路径,不需要传NGHTTP2_PATH:

nmake /f Makefile.vc mode=static vc=16 debug=no MACHINE=x64 WITH_NGHTTP2=static EXTRA_INCLUDES="/I C:\Users\ball\Desktop\nghttp2\nghttp2-1.45.1\lib\includes" EXTRA_LIBS="C:\Users\ball\Desktop\nghttp2\nghttp2-1.45.1\lib\nghttp2.lib"

额外注意事项

  • 你提前安装的nghttp2需要和当前libcurl的编译配置保持一致:同为x64架构、同为静态MT运行时、同为release/debug版本,否则会出现链接错误
  • 如果你需要搭配openssl使用,需要额外添加参数:WITH_SSL=static SSL_PATH="你的openssl根目录"
  • 编译完成后可以通过生成的curl命令行工具执行curl -V验证,输出内容中包含HTTP2字样即为编译成功

内容的提问来源于stack exchange,提问作者noah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:15:03