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

2024-01-01

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

我需要的“cURL -V”输出示例 https://i.stack.imgur.com/yjAiZ.png

我找到了很多适用于 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 https://curl.haxx.se/download.html)
  • 下载libssh2-1.8.0
  • 下载openssl-1.0.2l
  • 下载zlib-1.2.11
  • 遵循 Mingw32 的说明https://curl.haxx.se/docs/install.html https://curl.haxx.se/docs/install.html(但它一直给我错误“找不到 openSSL 包”)
  • 我在某处读到我需要使用“--with-nghttp2 --prefix-[NGHTTP2 文件夹的位置]”标志来编译 cURL,所以我尝试了一些我认为可行的方法,但我认为它不起作用: 'cmake --with-nghttp2 --prefix-[此处 NGHTTP2 文件夹的位置] 。 ',然后'cmake install 。 '看起来它做了一些事情,但是在curl-7.56.1/src/中构建的cURL.exe除了libcurl之外没有其他任何东西。

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


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

  • 已下载”Visual Studio 2017 构建工具 https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2017“能够从命令行构建(提供nmake以及所需的 Windows SDK 库和头文件)
  • 下载最新版本的curl,如上所述(curl-7.56.1.tar.gz,对我来说也是第一个https://curl.haxx.se/download.html https://curl.haxx.se/download.html)
  • 将其提取到里面c:/curl,所以我最终得到c:/curl/curl-7.56.1
  • 阅读说明构建.WINDOWS.txt inside c:/curl/curl-7.56.1/winbuild并继续http://windows.php.net/downloads/php-sdk/deps/ http://windows.php.net/downloads/php-sdk/deps/下载我需要的 4 个库。我刚刚获取了 VC15/x86 版本。
  • 在里面创建一个名为“deps”的新文件夹c:/curl/curl-7.56.1
  • 里面创建了以下3个文件夹c:/curl/curl-7.56.1/deps: bin, lib, and include
  • 将我刚下载的每个库解压到相应的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
  • 这会在以下子文件夹之一内构建一个 CURL 可执行文件c:\curl\curl-7.56.1\builds
  • 当我第一次尝试运行 CURL 时,它显示一个错误,提示缺少libssl-1_1.dll and libcrypto-1_1.dll,所以我不得不从c:\curl\curl-7.56.1\deps\bin到新建的同一目录curl.exe is
  • 注意:由于 zlib 没有附带bin包含任何的文件夹.dll的,我明白为什么我必须使用以下命令将 zlib 标记为静态WITH_ZLIB=static旗帜。我不明白的是为什么我必须这样做manually移动 openssl.dll位于新目录中。有什么想法吗?

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

PPS:正如你可能知道的那样,90% 的时间我都不知道自己在做什么。可能是我花了 5 天才弄清楚的原因;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows x64 上使用 openSSL 和 nghttp2 编译 cURL? 的相关文章

随机推荐

  • 如何使用 HttpWebRequest 获得文件并行

    我正在尝试制作一个像 IDM 这样的程序 它可以同时下载文件的部分内容 我用来实现此目的的工具是 C Net4 5 中的 TPL但是我在使用的时候遇到了问题Tasks使操作并行 序列功能运行良好 并且正在正确下载文件 使用任务的并行函数一直
  • 世博会在生产构建中找不到“主要”应用程序?

    几周前我一直在尝试修复这个错误 但没有成功 问题是我因此无法发布我的应用程序 当我为 iOS 或 Android 中的任何一个构建 expo 应用程序时 Expo CLI 签名过程进展顺利 没有错误并生成最终捆绑包 但是当我将 spa 或
  • 如何找到给定范围内的所有素数?

    def all primes start end list primes for i in range start end for a in range 2 i if i a 0 list primes append i return li
  • 拉取存储库时 X509 解析错误,“负序列号”

    我们的服务器通过代理访问互联网 当我尝试运行诸如之类的拉取命令时 sudo docker run t i ubuntu 14 04 bin bash 我收到以下错误 Get https index docker io v1 reposito
  • IE 100% CPU 挂起/获取堆栈跟踪

    我遇到过 IE7 挂起访问我的网络应用程序的情况 立足于优秀建议 https stackoverflow com questions 574423 ie hanging using 100 of the cpu 574595 574595
  • 如何将 UISegmentedControl 放在 NavigationController 下?

    我想知道让 UISegmentedControl 出现在 navigationController 下方的最佳方法是什么 就像在 AppStore 应用程序中一样 我要放入不同视图中的内容是 UITableView 就像 AppStore
  • 在 NSPredicate 中组合两个条件

    如何将两个条件结合起来NSPredicate 我正在使用以下语句 我想添加另一个条件 使用以下命令将密码与文本字段的内容进行比较AND request predicate NSPredicate format username txtUse
  • argv 可以在运行时更改(不能由应用程序本身更改)

    我想知道可以输入参数main 在运行时更改 换句话说 我们是否应该保护应用程序免受可能的影响TOCTTOU https en wikipedia org wiki Time of check to time of use处理数据时的攻击ar
  • JavaScript 是否通过引用传递? [复制]

    这个问题在这里已经有答案了 JavaScript 是按引用传递还是按值传递 这是一个例子JavaScript 好的部分 https en wikipedia org wiki Douglas Crockford Bibliography 我
  • 从存储过程返回单个值到 .Net 哪个更好:OUTPUT 参数或 ExecuteScalar?

    我需要创建一个需要返回一些记录计数的存储过程 我正在使用 Net 来读取结果 我可以使用OUTPUT参数返回值or我可以做一个select count 在存储过程中并使用SqlCommand ExecuteScalar http msdn
  • 将对象类型的数据帧列转换为浮点型[重复]

    这个问题在这里已经有答案了 我想将我的数据帧的所有非浮点类型列转换为浮点 有什么方法可以做到这一点 如果我能在 One Go 中做到这一点那就太好了 下面是类型 longitude float64 latitude float64 hous
  • Jquery 确认不起作用

    我试过这个 https stackoverflow com a 12617274 4164311 https stackoverflow com a 12617274 4164311 字符串 您确定吗 仅出现在我的浏览器中 当我单击该按钮时
  • 如何在phpmyadmin中导入表?我收到文件大小错误

    我想在 phpmyadmin 中导入数据库 但出现这样的错误 未收到要导入的数据 没有提交文件名 或者文件大小超出了 PHP 配置允许的最大大小 我的文件大小是 4 8 mb 请给我解决方案 按着这些次序 转到 PHP 文件夹 gt 搜索
  • HTTP 基本身份验证和 OAuth 2.0 相同吗?

    供应商 API 文档之一提到他们的 API 调用需要使用 HTTP 基本身份验证方案 即用户 密码 Base64 编码 但是他们的令牌 API 相当于登录 文档提到 此服务实现了 OAuth 2 0 资源所有者密码和凭据授予 HTTP 基本
  • 如何测试一个块是否被屈服?

    我有一个测试需要检查是否正在调用给定方法的块 block lambda some stuff block should receive call get data with timeout 1 block def get data with
  • 禁用 esc 键超时

    Problem I am in insert mode and then I might type a number and then quickly ESC because I stopped typing so it will chan
  • Django Rest Framework:创建对象后禁用字段更新

    我正在尝试通过 Django Rest Framework API 调用使我的用户模型 RESTful 以便我可以创建用户并更新他们的个人资料 但是 当我与用户进行特定的验证过程时 我不希望用户在创建帐户后能够更新用户名 我尝试使用 rea
  • 在 Windows 上拦截和后处理所有音频流

    我想知道有什么方法可以创建一个应用程序来拦截计算机上正在播放的所有音频 以便我可以处理音频 应用一些效果 然后将其进一步传递到 Windows 音频子系统 我刚刚在Vista 7 WASAPI中瞥见了 有这个sAPO http www mi
  • 为什么我会延迟加载 NSBundle MobileCoreServices.framework?

    当我从主视图控制器重定向到另一个视图控制器时 我明白了 Error 延迟加载 NSBundle MobileCoreServices framework 加载MobileCoreServices framework systemgroup
  • 如何在 Windows x64 上使用 openSSL 和 nghttp2 编译 cURL?

    这是这里的第一个问题 所以请耐心等待 过去三天我一直在网上尝试找到一种方法在我的 Windows 机器上获得以下结果 我需要的 cURL V 输出示例 https i stack imgur com yjAiZ png 我找到了很多适用于