6

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

4

4 回答 4

6

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

  1. 为您的目标平台编译/获取 OpenSSL 的静态 .lib/.a 文件(Indy 的Fulgan 镜像提供了 iOS 的静态 .a 文件)。

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

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

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

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

于 2013-10-30T23:57:51.770 回答
0

将 OpenSSL DLL 从资源加载到内存中是否可行?

http://delphi.about.com/od/windowsshellapi/a/delphi-load-resource-dll-into-memory.htm

于 2013-10-31T08:40:50.383 回答
0

这个怎么样: http: //enigmaprotector.com/en/aboutvb.html

它只是 Windows(我认为),但您可以将所有 DLL 绑定到主 EXE,甚至可以将依赖 DLL 绑定到主 DLL。

于 2013-10-31T00:48:24.467 回答
0

您不能静态链接任何 DLL。该扩展名的字面意思是“动态链接库”。

没有依赖项会使您正在开发的可执行文件/库变得更大并受到许可问题的影响,同时也使更新变得更加困难:您为什么不想要共享对象(DLL)?

只需将 DLL 包含在您的项目中即可。

于 2013-10-30T23:41:00.883 回答