我如何静态链接Indy OpenSLL文件?AFAIK只允许ICS这样做,但由于一些奇怪的原因,Indy不允许。它也不提供.obj文件?这将允许我避免对dll的任何依赖。
lf5gs5x21#
OpenSSL主要是动态使用的。这使得在发布新的OpenSSL版本时可以轻松升级。然而,OpenSSL也可以静态编译,Indy 10.6.0+确实支持静态链接到OpenSSL,但目前只支持在iOS设备上(因为Apple不允许动态链接OpenSSL)。在所有其他平台上(包括iOS模拟器),默认情况下Indy会动态链接到OpenSSL。如果您希望Indy在非iOS平台上静态链接到OpenSSL,则必须手动设置:1.为目标平台编译/获取OpenSSL的静态链接目标文件(即,在Indy的OpenSSL-Binaries GitHub repo中提供iOS的静态.a文件)。1.更新Indy的IdCompilerDefines.inc文件,为目标平台定义USE_OPENSSL和STATICLOAD_OPENSSL。1.将IdSSLOpenSSLHeaders和IdSSLOpenSSLHeaders_static单位添加到uses子句中。1.请确保IdSSLOpenSSLHeaders_static.pas针对您的目标平台进行编译(它目前是为iOS设计的,因此您可能需要对其进行调整)。另一种选择是根本不使用OpenSSL,而是使用另一个SSL/TLS库,该库可以静态链接,并由一个合适的TIdSSLIOHandlerSocketBase实现 Package ,以供Indy使用。例如,EldoS SecureBlackbox为其SSL/TLS库提供了这样的实现。将来,Indy计划为Windows上的SChannel添加一个新的IOHandler实现。因为它们已经安装在操作系统中。
.a
IdCompilerDefines.inc
USE_OPENSSL
STATICLOAD_OPENSSL
IdSSLOpenSSLHeaders
IdSSLOpenSSLHeaders_static
uses
IdSSLOpenSSLHeaders_static.pas
TIdSSLIOHandlerSocketBase
wdebmtf22#
您不能静态链接任何DLL。扩展名字面上代表“动态链接库”。如果没有依赖项,则会使您正在开发的可执行文件/库变得更大,并受到许可问题的影响,同时也会使其更难更新:为什么不需要共享对象(DLL)?只要将DLL包含在项目中即可。
dauxcl2d3#
那这个呢:http://enigmaprotector.com/en/aboutvb.html它只有windows(我认为),但你可以把你所有的DLL绑定到你的主EXE,甚至把依赖DLL绑定到主DLL。
xjreopfe4#
将OpenSSL DLL从资源加载到内存中是否是可行的替代方案?http://delphi.about.com/od/windowsshellapi/a/delphi-load-resource-dll-into-memory.htm
4条答案
按热度按时间lf5gs5x21#
OpenSSL主要是动态使用的。这使得在发布新的OpenSSL版本时可以轻松升级。然而,OpenSSL也可以静态编译,Indy 10.6.0+确实支持静态链接到OpenSSL,但目前只支持在iOS设备上(因为Apple不允许动态链接OpenSSL)。在所有其他平台上(包括iOS模拟器),默认情况下Indy会动态链接到OpenSSL。如果您希望Indy在非iOS平台上静态链接到OpenSSL,则必须手动设置:
1.为目标平台编译/获取OpenSSL的静态链接目标文件(即,在Indy的OpenSSL-Binaries GitHub repo中提供iOS的静态
.a
文件)。1.更新Indy的
IdCompilerDefines.inc
文件,为目标平台定义USE_OPENSSL
和STATICLOAD_OPENSSL
。1.将
IdSSLOpenSSLHeaders
和IdSSLOpenSSLHeaders_static
单位添加到uses
子句中。1.请确保
IdSSLOpenSSLHeaders_static.pas
针对您的目标平台进行编译(它目前是为iOS设计的,因此您可能需要对其进行调整)。另一种选择是根本不使用OpenSSL,而是使用另一个SSL/TLS库,该库可以静态链接,并由一个合适的
TIdSSLIOHandlerSocketBase
实现 Package ,以供Indy使用。例如,EldoS SecureBlackbox为其SSL/TLS库提供了这样的实现。将来,Indy计划为Windows上的SChannel添加一个新的IOHandler实现。因为它们已经安装在操作系统中。wdebmtf22#
您不能静态链接任何DLL。扩展名字面上代表“动态链接库”。
如果没有依赖项,则会使您正在开发的可执行文件/库变得更大,并受到许可问题的影响,同时也会使其更难更新:为什么不需要共享对象(DLL)?
只要将DLL包含在项目中即可。
dauxcl2d3#
那这个呢:http://enigmaprotector.com/en/aboutvb.html
它只有windows(我认为),但你可以把你所有的DLL绑定到你的主EXE,甚至把依赖DLL绑定到主DLL。
xjreopfe4#
将OpenSSL DLL从资源加载到内存中是否是可行的替代方案?
http://delphi.about.com/od/windowsshellapi/a/delphi-load-resource-dll-into-memory.htm