winapi-在Windows上使用SSL支持构建libcurl

我在Win32 C ++应用程序中使用libcurl。

我将curllib.vcproj项目添加到我的解决方案中,并将其他项目设置为依赖它。

如何在启用SSL支持的情况下构建它?

sharkin asked 2020-08-07T08:02:17Z
10个解决方案
48 votes

好吧,由于这个帖子严重失败了,所以我不得不自己研究这个问题。

还请查看其他答案和评论,以获取有关其他版本等的其他信息。

编辑:自从我发布此Q以来,似乎可以从curl主页上获得现成的二进制文件了。 查看詹姆斯的答案。

因此,这里去:

-

预处理器

需要将以下两个符号提供给预处理器,以为libcurl启用SSL:

USE_SSLEAY
USE_OPENSSL

(libcurl将OpenSSL用于SSL支持)

另外,也可以将这些符号直接添加到libcurl中名为setup.h的文件中,但除非真的需要,否则我对修改第三方发行版中的代码不太满意。

重建libcurl库后,我现在遇到一些有关找不到OpenSSL包含文件的错误。 自然,由于我尚未正确设置OpenSSL发行版。

编译OpenSSL二进制文件

我下载了OpenSSL 0.9.8源代码发行版并将其解压缩。

在源代码分发的根目录中,有一个名为INSTALL.W32的文件,该文件描述了如何编译OpenSSL二进制文件。 构建链需要perl,因此我安装了最新版本的ActivePerl。

我在构建时遇到了一些麻烦,可能不适用于所有系统,但是如果有人遇到相同的问题,我将在此进行介绍。

根据INSTALL.W32:

在当前目录设置为源分发根的情况下运行以下命令行任务:

1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir

(其中“ c:/ some / openssl / dir”应替换为应安装OpenSSL的目录。不要在此路径中使用空格。在这种情况下,进一步的编译将失败)

2> ms\do_ms

对我来说,此步骤最初并不成功,因为我缺少环境变量OSVERSION和TARGETCPU。 我将它们分别设置为5.1.2600和x86。 您可能会抱怨OSVERSION是“疯狂的”,但仔细观察,此错误是针对WinCE的,不会影响Win32的安装。 要掌握您的操作系统版本,请在命令提示符下运行“ ver”命令或运行winver.exe。

3> nmake -f ms\nt.mak (for static library)

要么

3> nmake -f ms\ntdll.mak (for DLL)

现在可以编译源代码。 在笔记本电脑上花费了大约5分钟。

编译完成后,库或二进制文件已放入:

distroot / out32-用于静态库构建

要么

distroot / out32dll-用于DLL构建

建立和链接

现在,回到Visual Studio,指出库并包括标题的路径。 包含文件位于distroot / inc32 / openssl中。

切记添加libeay32.lib和ssleay32.lib作为链接器输入。

重建libcurl项目。

错误!

至少对我来说,使用此版本的OpenSSL。它抱怨OpenSSL标头之一中的结构typedef。 我找不到有关此的任何信息。 经过一个小时的搜索,我打破了自己的原则,并从OpenSSL标头中注释掉了typedef,幸运的是libcurl没有使用该符号,因此它可以正常运行。

更新:正如Jason所指出的,从1.0.0a版本开始,这个问题似乎已经消失了。

现在,为确认已为libcurl启用SSL支持,请运行以下代码:

curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
    // SSL support enabled
else
    // No SSL

就那么简单。

sharkin answered 2020-08-07T08:04:45Z
8 votes

也许这不是任何人都在寻找的答案,但是我只是从位于[http://curl.haxx.se/download.html]的链接中下载了预编译的DLL。

我运行了sharkin提供的测试,并且证明if( vinfo->features & CURL_VERSION_SSL )是真实的。

James answered 2020-08-07T08:05:10Z
6 votes

遵循罗伯特·奥斯赫勒(Robert Oschler)的建议,以下是我对这个问题的评论:

您可以使用预处理器符号USE_WINDOWS_SSPI和USE_SCHANNEL而不是OpenSSL来构建对Windows的本机SSL支持的最新libcurl(2012)。

fa. answered 2020-08-07T08:05:34Z
5 votes

当使用Visual Studio 2010在Windows上编译OpenSSL 1.0.0时,它最终引发了0x2错误:

NMAKE:致命错误U1077:'“ C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ BIN \ cl.EXE“':返回码'0x2'

停止。

似乎由于perl Configure文件中的一个标志-WX而引发此错误。如MSDN文档所述:

将所有编译器警告视为错误。 对于新项目,最好在所有编译中都使用/ WX。 解决所有警告将确保尽可能减少难以发现的代码缺陷。

在删除Configure文件中的-WX事件并重新输入此处所述的命令后,它可以正常运行并通过所有测试。

GaMer13 answered 2020-08-07T08:06:17Z
3 votes

在我的情况下,按照curl README文件就足够了。
我的配置如下:

  • Visual Studio 2015(VC14)
  • 静态库
  • Win64的
  • 卷曲版本7.57.0
  • OpenSSL 1.0.2

libCurl的编译

  1. 在那里下载libcurl源:[https://curl.haxx.se/download.html]
  2. 解压缩文件并转到文件夹CURL_DISABLE_LDAP
  3. 打开README文件并按照说明进行操作,这导致我执行以下操作:
    • 下载的OpenSSL
    • 解压缩并将其重命名为CURL_DISABLE_LDAP,将其放在curl文件夹旁边,这很重要,因为您将打开希望在其中找到openssl的VS项目。
    • 安装Perl
    • 执行实用程序CURL_DISABLE_LDAP以执行openSSL的编译。 通过我的设置,它变为:
      .\build-openssl.bat vc14 x64 release ..\..\openssl\
      只需运行.\build-openssl.bat -help即可了解有关参数的更多信息。
      之后,您可以在此处看到新文件夹的情况下查看OpenSSL的编译情况:openssl\build\Win64
  4. 打开Visual Studio项目CURL_DISABLE_LDAP
  5. 确保将Visual Studio项目设置为所需的构建配置(在我的情况下为CURL_DISABLE_LDAP
  6. 建立全部
  7. 图书馆位于CURL_DISABLE_LDAP

备注

  • 不要忘记在自己的项目中定义CURL_DISABLE_LDAP预处理器
  • 使用静态库,您将不得不链接libcurl的依赖项,请参见此答案
  • 您可能不想依赖LDAP,在这种情况下,可以在编译libcurl之前通过设置预处理器CURL_DISABLE_LDAP禁用它。
vtellier answered 2020-08-07T08:08:26Z
2 votes

如果您使用Visual Studio IDE进行构建,并收到58个奇怪的警告,例如

“ DLL链接不一致curl_global_init / curl_msnprintf / ...”

您应该将CURL_STATICLIB添加到预处理器定义中。

因此整个定义行应如下所示:

USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB。

这样,所有警告将消失。

有些人会忽略警告并继续使用这些库,但随后会得到相应的* error * s,例如curl_global_init / curl_msnprintf。 可能很烦人。

希望它可以帮助别人。

Hackle answered 2020-08-07T08:09:17Z
2 votes
\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code 

可以通过在Visual Studio中执行vcvarsall.bat来解决该错误。

jayaanand answered 2020-08-07T08:09:38Z
1 votes

我为Windows 7 rc7100做过“ do_nt.bat”不要忘记“ nmake -f ms \ nt.mak安装”正确复制标题

谢谢,这确实有很大帮助

answered 2020-08-07T08:10:02Z
1 votes

响应于和/或除上述之外的几个注释。

首先,如果您不想与ActivePerl混为一谈,Strawberry Perl非常棒,并且可以完美地实现此目的。

其次,如果可能的话,我建议不要使用do_ms.bat,因为根据INSTALL.W32,

这是值得做的,因为它将 产生更快的代码:例如 通常会导致2倍 RSA例程中的加速。

另外,构建0.9.8l(L)的OpenSSL也是一场噩梦,所以我最终放弃了并恢复为0.9.8k,该构建并与libcurl 1.9进行了(静态)链接。

hemp answered 2020-08-07T08:10:40Z
1 votes

如何在Windows上使用OpenSSL(SSL支持)构建libcurl C / C ++

  1. 安装libcurl
  2. 安装OpenSSl
  3. 使用OpenSSL构建libcurl

安装libcurl

转到libcurl的下载页面,并在Source Archives下下载ZIP文件。 在我的情况下称为Linker -> Input

提取档案并使用Visual Studio打开Linker -> Input

安装OpenSSL

下载OpenSSL的Windows二进制文件。 就我而言,我从Shining Light Productions发行版下载了Windows安装程序文件Linker -> Input

我的安装文件夹是Linker -> Input

使用OpenSSL构建libcurl

Linker -> Input Visual Studio解决方案文件中,将生成配置更改为C:\OpenSSL-Win32\include

在解决方案资源管理器中,右键单击项目Linker -> Input并转到“属性”。

Linker -> Input下,修改C:\OpenSSL-Win32\include并将路径添加到您的Additional Include Directories。就我而言,这是Linker -> General

应用并关闭属性窗口。

右键单击项目Linker -> Input,并执行与上一步相同的操作,将C:\OpenSSL-Win32\include添加到Linker -> General下的Additional Include Directories

Linker -> Input下,将C:\OpenSSL-Win32\include添加到Additional Include Directories中。

最后转到Linker -> Input并修改curld.exe。将所有lib文件替换为以下内容:

ws2_32.lib
wldap32.lib
openssl.lib
libssl.lib
libcrypto.lib

应用并关闭属性窗口。

在仍选择了curld.exe构建配置的情况下,转到libssl-1_1.dll

将两个dll文件curld.exelibssl-1_1.dll从OpenSSL bin目录(curld.exe)复制到刚创建的生成目录curl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL

验证构建

在构建目录中,运行curld.exe。如果运行时没有错误(缺少dll等),则说明构建成功。

Acidic answered 2020-08-07T08:12:36Z
translate from https://stackoverflow.com:/questions/197444/building-libcurl-with-ssl-support-on-windows