44

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

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

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

4

10 回答 10

48

好吧,由于这篇文章失败了,我不得不自己深入研究这个问题。

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

编辑:自从我发布了这个 Q 之后,curl 主页似乎提供了现成的二进制文件。看看詹姆斯的回答

所以这里是:

-

预处理器

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

USE_SSLEAY
USE_OPENSSL

(libcurl 使用 OpenSSL 来支持 SSL)

或者,可以将符号直接添加到 libcurl 中名为 setup.h 的文件中,但除非我真的必须这样做,否则我对修改 3rd 方发行版中的代码不太满意。

重建 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.2600x86。你可能会抱怨 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.libssleay32.lib作为链接器输入。

重建 libcurl 项目。

错误!

至少对我来说这个版本的 OpenSSL。它抱怨 OpenSSL 标头之一中的 struct 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

就那么简单。

于 2008-10-13T21:14:15.430 回答
9

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

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

于 2011-02-26T19:28:02.503 回答
6

按照 Robert Oschler 的建议,以下是我对作为答案的问题的评论:

您可以使用预处理器符号(USE_WINDOWS_SSPI 和 USE_SCHANNEL 而不是 OpenSSL 的)构建最近的 libcurl (2012),并为 Windows 提供原生 SSL 支持。

于 2014-10-09T08:23:38.420 回答
5

在 Windows 上使用 Visual Studio 2010 编译 OpenSSL 1.0.0 时,最终抛出 0x2 错误:

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

停止。

看来这个错误会因为perl配置文件中的一个标志,即-WX而抛出。正如 MSDN 文档所述:

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

在配置文件中删除 -WX 出现并重新输入此处所述的命令后,它构建良好并通过了所有测试。

于 2010-05-16T11:29:07.657 回答
3

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

  • 视觉工作室 2015 (VC14)
  • 静态库
  • Win64
  • 卷曲版本 7.57.0
  • OpenSSL 1.0.2

libCurl 的编译

  1. 在那里下载 libcurl 源:https ://curl.haxx.se/download.html
  2. 解压文件并进入文件夹curl-7.57.0\projects
  3. 打开 README 文件并按照说明进行操作,这将引导我执行以下操作:
    • 下载的 OpenSSL
    • 将其解压缩并重命名为openssl将其放在 curl 文件夹旁边,这很重要,因为您将打开希望在那里找到 openssl 的 VS 项目。
    • 安装Perl
    • 执行实用程序build-openssl.bat以执行 openSSL 的编译。使用我的设置,这变成了以下内容:
      .\build-openssl.bat vc14 x64 release ..\..\openssl\
      只需运行.\build-openssl.bat -help以了解有关参数的更多信息。
      之后,您可以看到 OpenSSL 已编译,因为您在此处获得了一个新文件夹:openssl\build\Win64
  4. 打开 Visual Studio 项目curl-7.57.0\projects\Windows\VC14\curl-all.sln
  5. 请务必将 Visual Studio 项目设置为您需要的构建配置(LIB Release - LIB OpenSSL在我的情况下)
  6. 构建所有
  7. 图书馆位于curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib

评论

  • 不要忘记CURL_STATICLIB在自己的项目中定义预处理器
  • 使用静态库,您必须链接 libcurl 的依赖项,请参阅此答案
  • 您可能不想依赖LDAP ,在这种情况下,您可以通过在编译 libcurlCURL_DISABLE_LDAP 之前设置预处理器来禁用它。
于 2017-12-05T10:54:48.447 回答
2

如果您使用 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。这可能很烦人。

希望它可以帮助某人。

于 2012-03-16T08:05:02.237 回答
2
\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code 

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

于 2012-03-17T14:10:07.470 回答
2

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

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

安装 libcurl

转到libcurl 的下载页面并下载Source Archives下的 ZIP 文件。在我的情况下,它被称为curl-7.58.0.zip

提取存档并projects/Windows/VC15/curl_all.sln使用 Visual Studio 打开。

安装 OpenSSL

下载 OpenSSL 的 windows 二进制文件。就我而言,我Win32 OpenSSL v1.1.0gShining Light Productions 发行版下载了 Windows 安装程序文件。

我的安装文件夹是C:\OpenSSL-Win32.

使用 OpenSSL 构建 libcurl

curl_all.slnVisual Studio 解决方案文件中,将生成配置更改为DLL Debug - DLL OpenSSL.

在解决方案资源管理器中,右键单击项目curl并转到属性。

Linker -> General修改Additional Library Directories并添加路径到您的OpenSSL directory + \lib. 就我而言,这是C:\OpenSSL-Win32\lib.

应用并关闭属性窗口。

右键单击项目libcurl并执行与上一步相同的操作,添加OpenSSL directory + \libAdditional Library Directories.Linker -> General

在 下C/C++ -> General,添加C:\OpenSSL-Win32\includeAdditional Include Directories.

最后去Linker -> Input修改Additional Dependencies。将所有 lib 文件替换为以下内容:

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

应用并关闭属性窗口。

DLL Debug - DLL OpenSSL仍然选择构建配置的情况下,转到Build -> Build Solution.

将这两个 dll 文件从 OpenSSL bin 目录( )libcrypto-1_1.dll复制到刚刚创建的构建目录。libssl-1_1.dllC:\OpenSSL-Win32\bincurl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL

验证构建

在构建目录中,运行curld.exe. 如果它运行时没有错误(缺少 dll 等),那么您的构建成功。

于 2018-02-09T07:42:33.090 回答
1

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

谢谢这确实有很大帮助

于 2009-09-09T06:08:57.253 回答
1

回应和/或补充上述内容的几个注释。

首先,如果你不想弄乱 ActivePerl,Strawberry Perl非常棒,并且非常适合这个。

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

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

此外,构建0.9.8l (L) 的 OpenSSL 是一场噩梦,所以我最终放弃并恢复到0.9.8k,它与 libcurl 1.9 构建和链接(静态)没有问题。

于 2010-01-19T22:09:19.337 回答