即使我删除它们,Indy 10也会加载SSL库

时间:2014-01-29 15:49:51

标签: delphi ssl indy

我目前正在讨论一个非常奇怪的问题。在我的一个应用程序中,我使用OpenSSL和Indy来创建到主机的安全TCP连接。我想测试应用程序(和Indy)是否正在识别是否缺少OpenSSL库。这些库放在应用程序文件夹中。

奇怪的是,即使我删除了库,我的应用程序仍能正常工作。我还从我的计算机中删除了OpenSSL本身,并搜索了OpenSSL库的任何其他外观。我的电脑上没有OpenSSL库。

那是怎么回事?我从IndyOpenSSLHeader调用Load()方法来加载库并猜测它们正在加载完美。怎么会这样?我的电脑上没有库^^

顺便说一下,我没有设置自定义库路径。我使用默认的 - 据我所知 - 应该是应用程序文件夹。

我正在使用Delphi XE5和Indy 10进行应用。

这里有什么问题?

提前致谢!

2 个答案:

答案 0 :(得分:0)

它们可能静态链接到您的二进制文件中。

此外,SSL库可能存在很多地方。 请参阅此文章(桌面应用程序的搜索顺序): http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx

答案 1 :(得分:0)

如果你在iOS上,那么Indy links to OpenSSL statically。在任何其他平台上,Indy无法成功使用OpenSSL SSL / TLS而无需先加载其库文件,因此必须从错过的地方加载。如果您在Windows上运行,请使用Process Explorer查看实际加载的位置。

Indy默认使用操作系统搜索路径加载外部库。操作系统默认查看应用程序的文件夹,但它也可以查看其他位置。您可以使用Indy的IdOpenSSLSetLibPath()函数来指定加载OpenSSL的位置(ZLib有一个类似的函数 - IdZLibSetLibPath())。这样可以确保您的应用程序仅从应用程序的文件夹中加载库,而不是其他地方,以防有人恶意从应用程序的文件夹中删除库,试图欺骗它从OS的搜索路径上的另一个路径加载库。如果您只想查看应用程序在缺少库时的反应,而不必实际删除它们,那么它也适用于测试目的。