windows - 如何在 Windows x64 上使用 openSSL 和 nghttp2 编译 cURL?

标签 windows curl openssl xampp http2

这里的第一个问题,所以请耐心等待 :) 过去 3 天我一直在上网,试图找到一种方法在我的 Windows 机器上获得以下结果。

example of 'cURL -V' output I need

我找到了很多适用于 macOS 和 unix 的东西,但只有一些适用于 Windows 的东西。我正在运行 xampp,最终我试图让它通过 cURL/PHP 发送 http/2 请求。到目前为止我收集到的是我需要使用一些库编译 cURL,例如 openssl(至少 1.0.2)、启用 http/2 的 libcurl 和 nghttp2。我觉得我已经很接近了,但我只是缺少一些步骤。

到目前为止我做了什么:

  • 安装了 mingw32、cmake 和 Visual Studio 2017 构建工具
  • 下载了 nghttp2-1.27.0,并使用“cmake”和“cmake --build”获取了 5 个文件:nghttp2.dll、.exp、.lik、.lib 和 .pdb
  • 下载了 curl-7.56.1.tar.gz(https://curl.haxx.se/download.html 上的第一个)
  • 已下载 libssh2-1.8.0
  • 下载openssl-1.0.2l
  • 下载了 zlib-1.2.11
  • https://curl.haxx.se/docs/install.html 上按照 Mingw32 的说明进行操作(但它一直给我错误“找不到 openSSL 包”)
  • 我在某处读到我需要使用“--with-nghttp2 --prefix-[此处为 NGHTTP2 文件夹的位置]”标志编译 cURL,所以我尝试了一些我认为可行的方法,但我认为行不通它做到了:'cmake --with-nghttp2 --prefix-[此处 NGHTTP2 文件夹的位置]。 ',然后'cmake安装。 ' 看起来它做了一些事情,但是在 curl-7.56.1/src/中构建的 cURL.exe 除了 libcurl 之外没有其他任何东西。

任何建议或指示将不胜感激!谢谢你们:)

最佳答案

好的,我终于能够在支持 http/2 的 Windows 上构建 Curl。 这对我有用,一步一步:

  • 下载“Build Tools for Visual Studio 2017”以便能够从命令行构建(提供 nmake 和所需的 Windows SDK 库和 header 过滤器)
  • 下载最新版本的 curl,如上所述(curl-7.56.1.tar.gz,对我来说也是 https://curl.haxx.se/download.html 上的第一个)
  • 将其提取到 c:/curl 中,所以我得到了 c:/curl/curl-7.56.1
  • 阅读说明 BUILD.WINDOWS.txt inside c:/curl/curl-7.56.1/winbuild 并继续 http://windows.php.net/downloads/php-sdk/deps/下载我需要的 4 个库。我刚抓取了 VC15/x86 版本。
  • c:/curl/curl-7.56.1 中创建了一个名为“deps”的新文件夹
  • c:/curl/curl-7.56.1/deps 中创建了以下 3 个文件夹:binlib包括
  • 将我刚刚下载的每个库解压到相应的 3 个文件夹中
  • 打开 VS 2017 开发人员命令提示符
  • cd c:/curl/curl-7.56.1/winbuild
  • nmake -f Makefile.vc mode=dll WITH_DEVEL=c:/curl/curl-7.56.1/deps WITH_SSL=dll WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=dll
  • 这会在 c:\curl\curl-7.56.1\builds 的子文件夹之一中构建一个 CURL 可执行文件
  • 当我第一次尝试运行 CURL 时,它显示了一个错误,指出缺少 libssl-1_1.dlllibcrypto-1_1.dll,所以我不得不从 c:\curl\curl-7.56.1\deps\bin 到新建的curl.exe所在目录
  • 注意:由于 zlib 没有附带包含任何 .dllbin 文件夹,我理解为什么我必须使用 将 zlib 标记为静态>WITH_ZLIB=static 标志。我不明白的是为什么我必须手动将 openssl .dll 移动到新目录中。有什么想法吗?

PS:感谢 Daniel 为我指明了正确的方向。我什至没有注意到 /winbuild 目录。

PPS:您可能会说,我 90% 的时间都不知道自己在做什么。可能是为什么我花了 5 天时间才弄明白 ;)

关于windows - 如何在 Windows x64 上使用 openSSL 和 nghttp2 编译 cURL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981784/

相关文章:

authentication - OpenSSL 客户端基于证书的身份验证失败

python - 如何使用 Python 通过证书颁发机构验证公钥?

c++ - 需要 GDI 编程指南

python - 在 Windows 中安装 Python 模块

php - Docker 开发环境中 Localhost 连接被拒绝

php - 如何在 Guzzle 通话中通过登录屏幕

ssl - TCP/IP 套接字无法与 TLSv1_2_client_method() 建立安全连接

windows - 鼠标单击是 WM_* 消息还是向上和向下消息的组合?

c++ - 在 MFC CScrollView 的固定位置显示子窗口

php - JSON 原始 POST cURL 请求不起作用