我目前正在讨论一个非常奇怪的问题。在我的一个应用程序中,我使用OpenSSL和Indy来创建到主机的安全TCP连接。我想测试应用程序(和Indy)是否正在识别是否缺少OpenSSL库。这些库放在应用程序文件夹中。
奇怪的是,即使我删除了库,我的应用程序仍能正常工作。我还从我的计算机中删除了OpenSSL本身,并搜索了OpenSSL库的任何其他外观。我的电脑上没有OpenSSL库。
那是怎么回事?我从IndyOpenSSLHeader调用Load()方法来加载库并猜测它们正在加载完美。怎么会这样?我的电脑上没有库^^
顺便说一下,我没有设置自定义库路径。我使用默认的 - 据我所知 - 应该是应用程序文件夹。
我正在使用Delphi XE5和Indy 10进行应用。
这里有什么问题?
提前致谢!
答案 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的搜索路径上的另一个路径加载库。如果您只想查看应用程序在缺少库时的反应,而不必实际删除它们,那么它也适用于测试目的。