"Could Not Load SSL Library" C++Builder 中的错误

"Could Not Load SSL Library" error in C++Builder

这个问题已经讨论过好几次了,这次来问你也是一样的情况。

首先问题的重点是在HTTPS网页上使用TIdHTTPGet()功能时,出现无法加载SSL库的提示

所以我将 TIdSSLIOHandlerSocketOpenSSL 添加到 TIdHTTP::IOHandler,将 TIdHTTP::HandleRedirects 属性 更改为 true,将 libeay32.dllssleay32.dll 文件移动到可执行文件的位置,它在 C++Builder Berlin 中正常运行。

但是,在C++Builder 2007中,即使我使用相同的环境和Get()代码设置它,也会出现“Could Not Load SSL Library”错误。

如果有谁遇到过类似的问题,能否请教一下您的解决方案?

在评论中,您提到 Indy 的 WhichFailedToLoad() 函数报告 OpenSSL DLL 中缺少各种 ..._indy 函数。 Indy 正在寻找这些函数的事实意味着您使用的是 Indy v8 或 v9,而不是 v10。您可以通过查看 IdGlobal 单元中的 gsIdVersion 全局变量来验证这一点。

Indy v8 和 v9 需要 定制的 OpenSSL 0.9.6 DLL。当时,Indy 需要访问 OpenSSL 尚未公开 public 访问权限的各种 OpenSSL 内部结构(在后来的 OpenSSL 版本中得到纠正),因此 Indy 需要向 DLL 添加一些自定义函数。您可以从 Indy's OpenSSL-Binaries 存储库的 Archive 文件夹中获取这些 DLL。

但是,Indy v8 和 v9 已经过时,不再受支持。它们不支持 OpenSSL 1.0.x 及更高版本。您将必须升级到 Indy v10,它使用 standard OpenSSL DLL,并且 officially 最高支持 OpenSSL 1.0.2u(支持 OpenSSL 1. 1.x 是 work in progress,但如果您需要使用 OpenSSL 1.1.x,例如 TLS 1.3),您可以尝试一下。