如何静态链接Indy OpenSLL文件?AFAIK只有ICS才允许这样做,但出于某种奇怪的原因,Indy没有.它也不提供.obj文件?这将允许我避免任何依赖于dll的.
OpenSSL 主要用于动态使用。这允许在发布新的 OpenSSL 版本时轻松升级。但是,OpenSSL 也可以静态编译,并且 Indy 10.6.0+ 确实支持静态链接到 OpenSSL,但目前仅支持在 iOS 设备上(因为 Apple 不允许动态链接 OpenSSL)。在所有其他平台(包括 iOS 模拟器)上,Indy 默认动态链接到 OpenSSL。如果您希望 Indy 在非 iOS 平台上静态链接到 OpenSSL,则必须手动设置:
为您的目标平台编译/获取 OpenSSL 的静态 .lib/.a 文件(适用于 iOS 的静态 .a 文件在 Indy's Fulgan mirror 中提供)。
更新 Indy 的 IdCompilerDefines.inc 文件以定义USE_OPENSSL和STATICLOAD_OPENSSL用于您的目标平台。
将IdSSLOpenSSLHeaders和IdSSLOpenSSLHeaders_static单位添加到您的uses子句中。
确保IdSSLOpenSSLHeaders_static.pas针对您的目标平台进行编译(它目前是为 iOS 设计的,因此您可能需要对其进行调整)。
另一种方法是根本不使用 OpenSSL,而是使用另一个可以静态链接的 SSL/TLS 库,并由合适的TIdSSLIOHandlerSocketBase实现包装以供 Indy 使用。 例如,EldoS SecureBlackbox为其 SSL/TLS 库提供了这样的实现。并且在未来,Indy 计划在 Windows 上为 SChannel 添加一个新的 IOHandler 实现,它不需要分发 DLL,因为它们已经安装在操作系统中。