当前位置:  开发笔记 > 后端 > 正文

在Windows上使用SSL支持构建libcurl

如何解决《在Windows上使用SSL支持构建libcurl》经验,为你挑选了4个好方法。

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

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

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



1> sharkin..:

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

另外,请查看其他答案和评论,了解有关其他版本等的其他信息.

编辑:自从我发布此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.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分钟.

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

distroot/out32 - 用于静态库构建

要么

distroot/out32dll - 用于DLL构建

建立和链接

现在,回到visual studio并指出libs并包含标题的路径.包含文件位于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

就那么简单.


你能否更新你的(真棒)答案,提醒人们将libeay32.lib和ssleay32.lib添加到静态构建的链接器输入中?
在最新的libcurl(2012)中,您可以使用预处理器符号USE_WINDOWS_SSPI和USE_SCHANNEL而不是OpenSSL来为Windows提供本机SSL支持。

2> 小智..:

也许这是没有答案的人正在寻找,但我只是简单地从网上下载预编译的DLL 此链接在发现http://curl.haxx.se/download.html

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



3> fa...:

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

您可以使用预处理器符号构建最近的libcurl(2012),其中包含对Windows的本机SSL支持:USE_WINDOWS_SSPI和USE_SCHANNEL而不是OpenSSL.



4> GaMer13..:

在使用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配置文件中的标志,即-WX,似乎会抛出此错误.正如MSDN文档所述:

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

删除配置文件中的-WX事件并重新输入此处所述的命令后,它构建正常并通过了所有测试.


或者可以修复导致警告的重新定义.请参阅http://rt.openssl.org/Ticket/Display.html?id=2261&user=guest&pass=guest上的错误报告
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有