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

时间:2017-10-27 19:00:47

标签: 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 FOLDER HERE]的标志来编译cURL,所以我尝试了一些我认为会起作用的东西,但我不认为它确实:'cmake --with-nghttp2 --prefix- [NGHTTP2文件夹的位置]。 ',然后'cmake安装。 '看起来它做了一些事情,但是在curl-7.56.1 / src /中构建的cURL.exe除了libcurl之外没有其他任何内容。

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

1 个答案:

答案 0 :(得分:4)

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

  • 已下载" Build Tools for Visual Studio 2017"能够从命令行构建(提供nmake和所需的Windows SDK库和标题过滤器)
  • 下载了最新版本的curl,如上所述(curl-7.56.1.tar.gz,又名为https://curl.haxx.se/download.html上的第一个)
  • c:/curl内提取了它,所以我最终得到了c:/curl/curl-7.56.1
  • c:/curl/curl-7.56.1/winbuild内阅读说明 BUILD.WINDOWS.txt ,然后继续http://windows.php.net/downloads/php-sdk/deps/下载我需要的4个库。我抓住了VC15 / x86版本。
  • 创建了一个名为" deps"的新文件夹。在c:/curl/curl-7.56.1
  • c:/curl/curl-7.56.1/deps内创建了以下3个文件夹:binlibinclude
  • 提取我刚刚在相应的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.dll libcrypto-1_1.dll ,所以我不得不从{ {1}}到新构建的 curl.exe
  • 所在的目录
  • 注意:由于zlib没有包含任何c:\curl\curl-7.56.1\deps\bin的{​​{1}}文件夹,因此我理解为什么必须将zlib标记为静态{{1}标志。我不知道为什么我必须手动移动新目录中的openssl bin。有什么想法吗?
PS:谢谢丹尼尔指出我正确的方向。我甚至没有注意到.dll目录。

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