如何静态链接Indy SSL文件?

时间:2013-10-30 23:38:22

标签: delphi indy

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

3 个答案:

答案 0 :(得分:3)

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

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

  2. 更新Indy的IdCompilerDefines.inc文件,为目标平台定义USE_OPENSSLSTATICLOAD_OPENSSL

  3. IdSSLOpenSSLHeadersIdSSLOpenSSLHeaders_static单位添加到您的uses条款中。

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

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

答案 1 :(得分:0)

您无法静态链接任何DLL。扩展名字面意思是“动态链接库”。

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

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

答案 2 :(得分:0)

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

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