- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Win32 C++ 应用程序中使用 libcurl。
我将 curllib.vcproj 项目添加到我的解决方案中,并将我的其他项目设置为依赖它。
如何在启用 SSL 支持的情况下构建它?
最佳答案
好吧,由于这篇文章严重失败,我不得不自己深入研究这个问题。
另请查看其他答案和评论,了解有关其他版本等的其他信息。
编辑:自从我发布了这个问题后,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 并指出库并包含 header 的路径。包含文件位于 distroot/inc32/openssl。
记得添加 libeay32.lib 和 ssleay32.lib 作为链接器输入。
重建 libcurl 项目。
错误!
至少对我来说,这个版本的 OpenSSL 是这样。它提示其中一个 OpenSSL header 中的 struct typedef。我找不到这方面的任何信息。经过一个小时的谷歌搜索后,我打破了自己的原则并从 OpenSSL header 中注释掉了 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
就这么简单。
关于winapi - 在 Windows 上构建支持 SSL 的 libcurl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197444/
一个非常简单的问题,如果我创建一个 HANDLE在 app1.exe 中,它得到值 0x01这个值是全局唯一的吗? 或者当其他一些进程创建一个 HANDLE 时是否有可能?也有值(value) 0x0
我正在使用winapi-rs crate并尝试获取cpu的使用率,但是我什至无法做到这一点。 PdhCollectQueryData转换为十六进制时将返回“-2147481643”,然后错误代码为“0
有人可以告诉我,在 winapi 中将进度条作为 TreeView 控件的一部分是否现实?我使用 GTK 制作了一个 GUI,并且使用进度条作为单元格元素效果很好,如下图所示。 我没有开发自定义控件的
有 getaddrinfo() 用于阻止主机解析,但是否有非阻塞方法? 最佳答案 我不认为有这样的事情,但你总是可以将它包装在一个线程中并使用信号量来表示完成。 关于winapi - 在 WINAPI
如果我知道 Hwnd,如何获取正在运行的应用程序的图标? 最佳答案 如果你有窗口的句柄,你可以使用 GetClassLong : HICON icon = (HICON)GetClassLong(wi
我正在尝试阅读 IMAGE_DOS_HEADER使用 definition of that structure 的模块来自 winapi箱。 这是我的工作代码: let mut IDH: IMAGE_
我目前正在阅读MSDN的文档,以将流渲染到音频渲染器。 换句话说,就是从麦克风播放我捕获的数据。 http://msdn.microsoft.com/en-us/library/dd316756%28
我有一个问题,希望你能帮我解决。已经没有我的研究运气了...尝试过 stackoverflow、google,甚至 yahoo... 如何在不使用鼠标的情况下强制显示工具提示? 我目前正在实现一些窗口
在 D 中,每次启动应用程序时,我的垃圾收集器都会崩溃。 Windows 模块: pragma(lib, "user32.lib"); import std.string; extern(Window
我正在学习 WinAPI C++ 的绘图形状 我试图在 WM_PAINT 上用一些代码绘制 2 个椭圆: PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps)
我使用 PostMessage 模拟鼠标事件并在记事本应用程序上进行了测试。 我不想通过发送鼠标事件来获得记事本应用程序的焦点。 仅当我在 PostMessage 参数中使用记事本的 ChildWin
如何使用 Win32 WinAPI 创建一个 EditBox,使其看起来像在 Visual C# 或 VB 中的 VS 设计器中放置一个编辑框(具有漂亮的顶部边框等)?这是一张图片,展示了它的外观以及
有CopyRect WinAPI function ,它只是复制一个 RECT到另一个。 自从我挖掘它以来,我一直对这个函数存在的原因很感兴趣。 是赋值运算符 ( = ) 还是 CopyMemory功
只是想知道是否有一种方法可以将数字打印到控制台通过调用。它可以是 10 进制,也可以是十六进制,我不介意。 我想看看一些函数返回的格式。 我宁愿不使用 WriteConsole 和大量 asm 来做这
这似乎部分有效,但我无法获取要打印的字符串值 pub fn test() { let mut buf: Vec = vec![0; 64]; let mut sz: DWORD = 0
在 Excel 中使用 Visual Basic,我可以使用 DECLARE 关键字声明 WinAPI 函数 - 例如 Declare Function SetLocaleInfo Lib "kern
..嗨,我有这个代码: #[cfg(windows)] extern crate winapi; use winapi::um::winuser::{FindWindowW, GetClientRec
我有一个 WH_CALLWNDPROC Hook 代码,它处理 WM_INITDIALOG 消息以获取有关消息框的信息。我可以获得“消息”、“标题”、“按钮”,但无法获得“图标”信息。我正在尝试使用如
这是我的源代码: extern crate user32; extern crate kernel32; use std::io::prelude::*; use std::net::TcpStrea
WinAPI OpenFile 函数返回 HFILE,例如 GetFileTime 需要 HANDLE。当我用 (HANDLE)some_hFile 喂它时,它似乎工作正常。这种类型有什么不同吗,或者
我是一名优秀的程序员,十分优秀!