Lazarus在OS X上使用Indy + OpenSSL导致EIdOSSLCouldNotLoadSSLLibrary

时间:2016-03-14 02:59:55

标签: macos openssl indy lazarus

我目前正在使用:

  • OS X Yosemite 10.10.5
  • 最新Indy(10.6.2.0,下载2016年3月13日 - Indy10_5346.zip)
  • Lazarus 1.4.4
  • 最新的openssl

OpenSSL更具体地说:

  • openssl-1.0.2g相应于家庭酿造cmd线界面
  • 放在/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()befoe传递给了Indy。

但我收到错误: EIdOSSLCouldNoLoadSSLLibrary at:

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是正确的(Indy在使用&#34时正确设置文件扩展名; HackLoadFileName"在" LoadLibrary"调用)

  • Indy尝试迭代/加载以下名称: libcrypto,libcrypto.1.0.0,libcrypto.10,libcrypto.1.0.1,libcrypto.1.0.2

...

问题#1:

  • 为什么自制软件在一个名为的文件中发布openssl 1.0.2g libcrypto.1.0.0.dylib - 最大化兼容性是什么?

...

关于可能原因的想法#1:

这可能是Lazarus为OS X编译 32位的问题吗? OpenSSL是 64位

1 个答案:

答案 0 :(得分:0)

在命令行中安装这样的openssl: brew install openssl --universal

这可确保库适用于32位和64位应用程序。

您可能需要先使用:brew uninstall openssl

卸载