如何静态链接Indy SSL文件?

Eri*_*tos 6 delphi indy

如何静态链接Indy OpenSLL文件?AFAIK只有ICS才允许这样做,但出于某种奇怪的原因,Indy没有.它也不提供.obj文件?这将允许我避免任何依赖于dll的.

Rem*_*eau 6

OpenSSL 主要用于动态使用。这允许在发布新的 OpenSSL 版本时轻松升级。但是,OpenSSL 也可以静态编译,并且 Indy 10.6.0+ 确实支持静态链接到 OpenSSL,但目前仅支持在 iOS 设备上(因为 Apple 不允许动态链接 OpenSSL)。在所有其他平台(包括 iOS 模拟器)上,Indy 默认动态链接到 OpenSSL。如果您希望 Indy 在非 iOS 平台上静态链接到 OpenSSL,则必须手动设置:

  1. 为您的目标平台编译/获取 OpenSSL 的静态 .lib/.a 文件(适用于 iOS 的静态 .a 文件在 Indy's Fulgan mirror 中提供)。

  2. 更新 Indy 的 IdCompilerDefines.inc 文件以定义USE_OPENSSLSTATICLOAD_OPENSSL用于您的目标平台。

  3. IdSSLOpenSSLHeadersIdSSLOpenSSLHeaders_static单位添加到您的uses子句中。

  4. 确保IdSSLOpenSSLHeaders_static.pas针对您的目标平台进行编译(它目前是为 iOS 设计的,因此您可能需要对其进行调整)。

另一种方法是根本不使用 OpenSSL,而是使用另一个可以静态链接的 SSL/TLS 库,并由合适的TIdSSLIOHandlerSocketBase实现包装以供 Indy 使用。 例如,EldoS SecureBlackbox为其 SSL/TLS 库提供了这样的实现。并且在未来,Indy 计划在 Windows 上为 SChannel 添加一个新的 IOHandler 实现,它不需要分发 DLL,因为它们已经安装在操作系统中。

  • @MehmetFide 是的,它仍在待办事项列表中。至于为什么没有从一开始就实现,我只能推测,因为我没有参与 Indy 的早期版本。Indy 是跨平台的,OpenSSL 也是如此,因此使用适用于所有平台的单一代码是有意义的。直到最近几年,所有平台上对 OpenSSL 的支持才开始动摇。此外,即使在 Windows 是唯一受支持的平台时,使用 OpenSSL 而不是 SChannel 来实现 SSL/TLS 仍然更为常见。 (2认同)