如何将Indy迁移到64位的OpenSSL DLL?
我正在将我的Delphi 12应用从32位迁移到64位。目前我使用Indy,并使用32位 OpenSSL DLL(libeay32.dll和 ssleay32.dll)。
当我切换到64位并尝试运行应用时,出现 'Could not load SSL library' 错误。然后我去GitHub下载这些DLL的 64位版本,来源于 https://github.com/IndySockets/OpenSSL-Binaries。
下载了文件,但里面有很多文件夹,如:
openssl-1.0.2q-x64_86-win64
openssl-1.0.2r-x64_86-win64
openssl-1.0.2s-x64_86-win64
尝试使用其中的第一个,但仍然出现相同的异常。应该使用哪一个?即使x64文件夹中的DLL名称也带有 '32',让我很困惑。
解决方案
当我切换到64位并尝试运行应用时,我会看到 'Could not load SSL library' 错误。
当这种情况发生时,你可以使用Indy的 WhichFailedToLoad() 函数来查看实际失败的原因。
下载了文件,但里面有很多文件夹,如:
openssl-1.0.2q-x64_86-win64
openssl-1.0.2r-x64_86-win64
openssl-1.0.2s-x64_86-win64
那些是压缩包,而不是文件夹。每个压缩包只有一组DLL。
尝试使用第一种,但仍然出现相同的异常。我应该使用哪一个?
最新的那个:openssl-1.0.2u-x64_86-win64
即使是在x64文件夹中的DLL名称也带有 '32'
是的,这就是OpenSSL在 1.0.2版本中的命名方式,为了向后兼容。在OpenSSL 1.1中,DLL名称已更改(libeay32 -> libcrypto、ssleay32 -> libssl)。
也就是说,1.0.2是一个非常旧的OpenSSL版本。Indy内置的OpenSSL代码不支持OpenSSL 1.1+。要在Indy中使用现代OpenSSL版本(当前为4.0),你可以使用 TaurusTLS 或 IndySecOpenSSL。