好吧,由于这篇文章失败得很厉害,我不得不自己深入研究这个问题。
还可以查看其他答案和 cmets,了解有关其他版本等的更多信息。
编辑:自从我发布了这个 Q 之后,似乎可以从 curl 主页获得现成的二进制文件。查看James' answer。
所以这里是:
-
预处理器
需要将以下两个符号提供给预处理器以启用 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.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 标头之一中的 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
就这么简单。