Lazarus 在 OS X 上使用 Indy + OpenSSL 导致 EIdOSSLCouldNotLoadSSLLibrary
Lazarus using Indy + OpenSSL on OS X results in EIdOSSLCouldNotLoadSSLLibrary
我目前正在使用:
- OS X Yosemite 10.10.5
- 最新 Indy(10.6.2.0,下载 2016 年 3 月 13 日 - Indy10_5346.zip)
- 拉撒路 1.4.4
- 最新的 openssl
OpenSSL 更具体地说:
- openssl-1.0.2g对应home brew cmd line界面
- 放在/usr/local/Cellar/openssl/1.0.2/lib/
- 上面目录中的lib文件是:libcrypto.10.dylib,
libcrypto.1.0.0.dylib, libcrypto.dylib, libcrypto.a,
libssl.1.0.0.dylib, libssl.dylib, libssl.a
...
我在使用 Indy 之前使用 idOpenSSLSetLibPath() 将上述 pah 传递给 Indy。
但我收到错误消息:EIdOSSLCouldNotLoadSSLLibrary 位于:
TIdSSLIOHandlerSocketOpenSSL.Init() -> TIdSSLContext.Create()
...
LoadOpenSSLLibrary() -> IdSSLOpenSSLHeaders.Load()
...
Load()
...
hIDCrypto := LoadSSLCryptoLibrary() -> Result := HModule(HackLoad(...))
...
Result := LoadLibrary(HackLoadFileName(ALibName,ALibVersions[I])); // always zero :(
评论
"GIdOpenSSLPath + SSLCLIB_DLL_name are correct (file extension set correctly by Indy when using "HackLoadFileName" 在 "LoadLibrary" 调用中)
Indy 尝试 iterate/load 以下名称:libcrypto、libcrypto.1.0.0、libcrypto.10、libcrypto.1.0.1、libcrypto.1.0.2
...
附带问题 #1:
- 为什么 homebrew 在一个名为
libcrypto.1.0.0.dylib - 是为了最大化兼容性吗?
...
关于可能原因 #1 的想法:
难道这一切都是 Lazarus 为 OS X 编译 32 位 的问题吗?而OpenSSL是64位?
在命令行中像这样安装 openssl:brew install openssl --universal
这确保该库适用于 32 位和 64 位应用程序。
您可能需要先使用以下命令卸载:brew uninstall openssl
我目前正在使用:
- OS X Yosemite 10.10.5
- 最新 Indy(10.6.2.0,下载 2016 年 3 月 13 日 - Indy10_5346.zip)
- 拉撒路 1.4.4
- 最新的 openssl
OpenSSL 更具体地说:
- openssl-1.0.2g对应home brew cmd line界面
- 放在/usr/local/Cellar/openssl/1.0.2/lib/
- 上面目录中的lib文件是:libcrypto.10.dylib, libcrypto.1.0.0.dylib, libcrypto.dylib, libcrypto.a, libssl.1.0.0.dylib, libssl.dylib, libssl.a
...
我在使用 Indy 之前使用 idOpenSSLSetLibPath() 将上述 pah 传递给 Indy。
但我收到错误消息:EIdOSSLCouldNotLoadSSLLibrary 位于:
TIdSSLIOHandlerSocketOpenSSL.Init() -> TIdSSLContext.Create()
...
LoadOpenSSLLibrary() -> IdSSLOpenSSLHeaders.Load()
...
Load()
...
hIDCrypto := LoadSSLCryptoLibrary() -> Result := HModule(HackLoad(...))
...
Result := LoadLibrary(HackLoadFileName(ALibName,ALibVersions[I])); // always zero :(
评论
"GIdOpenSSLPath + SSLCLIB_DLL_name are correct (file extension set correctly by Indy when using "HackLoadFileName" 在 "LoadLibrary" 调用中)
Indy 尝试 iterate/load 以下名称:libcrypto、libcrypto.1.0.0、libcrypto.10、libcrypto.1.0.1、libcrypto.1.0.2
...
附带问题 #1:
- 为什么 homebrew 在一个名为 libcrypto.1.0.0.dylib - 是为了最大化兼容性吗?
...
关于可能原因 #1 的想法:
难道这一切都是 Lazarus 为 OS X 编译 32 位 的问题吗?而OpenSSL是64位?
在命令行中像这样安装 openssl:brew install openssl --universal
这确保该库适用于 32 位和 64 位应用程序。
您可能需要先使用以下命令卸载:brew uninstall openssl