在Windows上构build带有SSL支持的libcurl
我在Win32 C ++应用程序中使用libcurl。
我有curllib.vcproj项目添加到我的解决scheme,并设置我的其他项目依赖于它。
如何在启用SSL支持的情况下构build它?
那么因为这个post失败了,我不得不自己去深究。
另外检查其他答案和意见,其他信息的其他版本等
编辑:因为我发布这个Q似乎有从curl主页提供的现成的二进制文件。 看看詹姆斯的回答 。
所以在这里:
–
预处理器
需要将以下两个符号提供给预处理器才能为libcurl启用SSL:
USE_SSLEAY USE_OPENSSL
(libcurl使用OpenSSL进行SSL支持)
或者,这些符号可以直接添加到libcurl中名为setup.h的文件中,但是我不太乐意修改第三方发行版中的代码,除非我真的必须这样做。
重buildlibcurl库,我现在有一些关于OpenSSL包含文件没有find的错误。 当然,因为我还没有正确设置OpenSSL发行版。
编译OpenSSL二进制文件
我下载了OpenSSL 0.9.8源代码发行版,并将其解压。
源代码发行版的根目录中有一个名为INSTALL.W32的文件,它描述了如何编译OpenSSL二进制文件。 构build链需要perl,所以我安装了最新版本的ActivePerl。
我在编译时遇到了一些麻烦,这可能不适用于所有的系统,但我会在这里通过它,以防有人遇到相同的情况。
根据INSTALL.W32:
使用当前目录设置为源分布根目录运行以下命令行任务:
1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
(其中“c:/ some / openssl / dir”应该被应该安装OpenSSL的dir所替代,不要在这个path中使用空格,在这种情况下进一步编译将会失败)
2> ms\do_ms
对我来说,这一步起初并不成功,因为我缺less环境variablesOSVERSION和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 – 用于静态库构build
要么
distroot / out32dll – 用于DLL构build
build设和连接
现在回到Visual Studio并指出这些库并包含标题的path。 包含文件位于distroot / inc32 / openssl中 。
请记住添加libeay32.lib和ssleay32.lib作为链接器input。
重buildlibcurl项目。
错误!
至less对于我来说这个版本的OpenSSL。 它抱怨一个OpenSSL头文件中的struct typedef。 我找不到任何信息。 经过一个小时的search,我打破了我自己的原则,并从OpenSSL头注释了typedef,幸运的是libcurl没有使用这个符号,所以它build立好了。
更新:正如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
就那么简单。
也许这不是任何人正在寻找的答案,但我只是从http://curl.haxx.se/download.html 这个链接下载预编译的DLL。
我运行了sharkin提供的testing, if( vinfo->features & CURL_VERSION_SSL )
被certificate是正确的。
在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'
停止。
看来这个错误会因为perlconfiguration文件中的标志,即-WX而被抛出。 正如MSDN文档所述:
将所有编译器警告视为错误。 对于一个新的项目,最好在所有的汇编中使用/ WX; 解决所有警告将确保尽可能less的难以发现的代码缺陷。
在configuration文件中删除了-WX事件并重新input这里所述的命令后,它build立好了,并通过了所有的testing。
按照罗伯特·奥斯勒的build议,这里是我对这个问题的评论作为答案:
您可以使用预处理器符号:USE_WINDOWS_SSPI和USE_SCHANNEL而不是OpenSSL符号来构build最新的libcurl(2012),其中包含对Windows的本机SSL支持。
\ fatal error C1083: Cannot open include file: 'stdlib.h': No such file or directory NMAKE: fatal error U1077::return code
该错误可以通过在Visual Studio中执行vcvarsall.bat来解决。
我做了“do_nt.bat”为Windows 7 rc7100不要忘了“nmake -f ms \ nt.mak安装”正确地复制标题
谢谢这确实帮了很大忙
几个音符响应和/或除了上述..
首先,如果你不想惹恼ActivePerl,那么草莓Perl是非常棒的,并且非常适合这个。
其次,为了代替使用do_ms.bat ,我build议尽可能使用do_masm ,因为根据INSTALL.W32,
这是值得的,因为它会导致更快的代码:例如,它通常会导致在RSA例程中加速2倍。
另外,构build0.9.8l (L)的OpenSSL是一场噩梦,所以我最终放弃了并恢复到了0.9.8k ,它与libcurl 1.9build立和链接(静态)没有问题。
如果使用Visual Studio IDE进行构build,并获得58个类似的警告
“不一致的dll连接curl_global_init / curl_msnprintf / …”
您应该将CURL_STATICLIB添加到预处理器定义中。
所以整个定义线应该是这样的:
USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB。
这一切的警告将消失。
有些人会忽略警告,继续使用库,但会得到相应的* error * s,如curl_global_init / curl_msnprintf。 这可能是非常烦人的。
希望它能帮助别人。