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:调整目录结构适配默认规则(推荐)
- 将你nghttp2路径下的
C:\Users\ball\Desktop\nghttp2\nghttp2-1.45.1\lib\includes文件夹重命名为include - 执行以下编译命令:
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
相关产品推荐
相关产品推荐

