建设libcurl with SSL support on Windows
题
我使用的libcurl在Win32C++应用程序。
我有curllib.vcproj项目加入到我的解决方案和其他项目依赖于它。
我怎么建造它与SSL支持启用?
解决方案
那么,既然这个职位失败不好,我不得不挖调查此事自己。
也检查出关于其他版本等其他信息的其他答案和评论。的
编辑:由于我张贴这种问答似乎有来自卷边主页提供现成生成的二进制文件。请查看詹姆斯的回答。
所以这里有云:
-
<强>预处理强>
在下面的两个符号需要被供给到预处理器,以使与libcurl SSL:
USE_SSLEAY
USE_OPENSSL
(libcurl中使用的OpenSSL支持SSL)
或者符号可直接加入到一个名为setup.h libcurl中的文件,但我不太高兴的第三方分布修改代码,除非我真的不得不这样做。
重建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:/一些/ OpenSSL的/ DIR。”应该由应安装OpenSSL中DIR被替换不要在这个路径中使用空格编译远一点会在这种情况下,失败)
2> ms\do_ms
有关我此步骤是在第一次不成功的,因为我缺乏的环境变量和OSVERSION TARGETCPU。我分别设置这些以 5.1.2600 和 86 。您可能会收到的投诉约OSVERSION是“疯狂”,但仔细看,这个错误是WinCE和不影响的Win32安装。要了解您的操作系统版本的保持,运行“版本”从命令提示符或运行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的头一个抱怨一个结构类型定义。我找不到任何这信息。谷歌上搜索后,我的一个小时打破了我自己的原则和注释掉从OpenSSL的头typedef的,幸运的libcurl不使用该符号,因此建立了良好的。
更新:由于贾森指出,这个问题似乎已经dissapeared为版本1.0.0a的的
。现在,用于确认SSL支持与libcurl启用,运行下面的代码:
curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
// SSL support enabled
else
// No SSL
这么简单。
其他提示
也许这不是答案人人都在寻找的,但我只是刚刚下载的预先编译Dll 这个链接 现在 http://curl.haxx.se/download.html
我跑的测试,sharkin提供, if( vinfo->features & CURL_VERSION_SSL )
被证明是正确的。
继罗伯特Oschler的建议,这是我对这个问题的答案评论:
您可以建立libcurl的近期(2012年),原生支持SSL使用预处理符号窗口:USE_WINDOWS_SSPI和USE_SCHANNEL而不是OpenSSL的那些的。
当汇编OpenSSL的1.0.0on Windows with Visual Studio2010年,它最终扔了一个0x2错误:
N:致命的错误U1077:'"C:\Program 文件(86)\Visual Studio10.0 \VC\BIN\cl.EXE"':返回代码'0x2'
停止。
看来,这个错误将被抛弃,因为一个标志在perl配置文件,即-W.作为MSDN文件指出:
对待所有编译器的警告作为中的错误。对于一个新的项目,可能最好是使用/W在所有汇编;解决所有警报将确保尽可能少的难以找到代码的缺陷。
除去后-W发生在配置文件和重新进入的命令,说明 在这里, 它建造好并通过所有测试。
在我的情况下,按照卷README文件是不够的。
我的配置如下:
- Visual Studio2015年(VC14)
- 静态图书馆
- Win64
- 卷曲的版本7.57.0
- OpenSSL1.0.2
汇编libCurl
- 下载libcurl源有: https://curl.haxx.se/download.html
- 压缩的文件和转到文件夹
curl-7.57.0\projects
- 打开README文件,并按照指示,这导致我做到以下几点:
- 打开Visual Studio项目
curl-7.57.0\projects\Windows\VC14\curl-all.sln
- 一定要设置visual studio项目,以建立配置需要(
LIB Release - LIB OpenSSL
在我的情况) - 建立所有
- 图书馆位于
curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib
发言
- 不要忘了定义
CURL_STATICLIB
预处理在自己的项目 - 静态图书馆,你会需要联系与依存关系的libcurl,看看 这个答案
- 你可能不想要取决于 LDAP, 在这种情况下你可以禁用它通过设置的预处理器
CURL_DISABLE_LDAP
之前 你汇编libcurl.
如果您建立与Visual Studio IDE,并得到58余警告为喜欢
“不一致的DLL联动curl_global_init / curl_msnprintf /..."
您应该添加CURL_STATICLIB到preproccessor定义。
所以整个定义行应如下所示:
USE_SSLEAY; USE_OPENSSL; CURL_STATICLIB
通过这一切的警告就会消失。
有些人会忽略警告并继续使用该库,但随后会得到相应的*误差* S作为curl_global_init / curl_msnprintf的喜欢。它可以是非常烦人的。
希望它可以帮助人。
\ 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,我建议宁愿的 do_masm 如果可能的,因为,根据INSTALL.W32,
这是值得做的,因为它会 导致更快的代码:例如,它 通常将导致一个2倍 加速比在RSA例程。
此外,建立的 0.9.8l (L)的OpenSSL是一个恶梦,所以我最终放弃了,返回到 0.9.8k 其中建成和链接(静态地)与的libcurl 1.9没有问题。
如何建立libcurl C/C++与OpenSSL(SSL support)在窗户
- 安装libcurl
- 安装OpenSSl
- 建立libcurl与OpenSSL
安装libcurl
去 下载的页面的libcurl 和donwnload ZIP下的文件 来源档案. 在我的情况下,它被称为 curl-7.58.0.zip
提取存档和打开 projects/Windows/VC15/curl_all.sln
与Visual Studio.
安装OpenSSL
下载windows二进制的OpenSSL。在我的情况下,我下载的窗户安装程序的文件 Win32 OpenSSL v1.1.0g
从 闪亮的光线制作的分布.
安装的文件夹给我是 C:\OpenSSL-Win32
.
建设libcurl与OpenSSL
在 curl_all.sln
Visual Studio解决方案文件,改变建立配置 DLL Debug - DLL OpenSSL
.
在方案资源管理器,右键的项目 curl
和去性质。
下 Linker -> General
修改 Additional Library Directories
并添加的路径 OpenSSL directory + \lib
.在我的情况,这是 C:\OpenSSL-Win32\lib
.
申请和附近的属性窗口。
右键的项目 libcurl
做同样如前面的步骤,加 OpenSSL directory + \lib
要 Additional Library Directories
下 Linker -> General
.
下 C/C++ -> General
, 添加 C:\OpenSSL-Win32\include
来的 Additional 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文件 libcrypto-1_1.dll
和 libssl-1_1.dll
从OpenSSL bin directory (C:\OpenSSL-Win32\bin
) 刚刚创建的建立目录 curl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL
.
验证建立
内建立目录、运行 curld.exe
.如果它运行没有错误的(缺失的问题,等等。) 那么你的建立是成功的。