【问题标题】:Lazarus using Indy + OpenSSL on OS X results in EIdOSSLCouldNotLoadSSLLibraryLazarus 在 OS X 上使用 Indy + OpenSSL 导致 EIdOSSLCouldNotLoadSSLLibrary
【发布时间】:2016-03-14 02:59:55
【问题描述】:

我目前正在使用:

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

OpenSSL 更具体:

  • 根据 home brew 命令行界面打开 ssl-1.0.2g
  • 放置在 /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 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 在“LoadLibrary”调用中使用“HackLoadFileName”时正确设置了文件扩展名)

  • 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 编译 32bit 的问题吗? OpenSSL 是 64 位 吗?

【问题讨论】:

    标签: macos openssl indy lazarus


    【解决方案1】:

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

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

    你可能需要先卸载:brew uninstall openssl

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2013-08-23
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多