【问题标题】:Delphi Indy idHTTP causes Mac app to quitDelphi Indy idHTTP 导致 Mac 应用程序退出
【发布时间】:2020-10-17 14:59:57
【问题描述】:

在 Delphi 10.4.1 MacOS 项目中删除一个 idHTTP 组件并让它 Get() 一个文件会导致应用程序退出。

我不是在谈论未处理的异常。 MacOS 10.15.6 会在崩溃报告中显示此投诉而终止该应用程序:

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
/usr/lib/libcrypto.dylib
abort() called
Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI.

这里是代码。 Get() 必须传递一个实际的文件。 (如果 Get() 导致 404,则引发适当的异常。)

procedure TForm1.FormCreate(Sender: TObject);
var
  Stream: TMemoryStream;

begin
  Stream := TMemoryStream.Create;

  IdHTTP1.Get('https://www.bookup.com/cowupdates/build113.txt', Stream);

  // app crashes on Mac

【问题讨论】:

    标签: delphi indy delphi-10.4-sydney


    【解决方案1】:

    错误消息是不言自明的。 Indy 正在尝试加载 unversioned libcrypto.dylib 文件(用于 OpenSSL),显然您的 OSX 系统不喜欢这样。

    为避免这种情况,您可以在程序启动时调用IdOpenSSLSetCanLoadSymLinks(False)。有关更多详细信息,请参阅 Indy 网站上的 Changes for how OpenSSL is loaded on *Nix platforms。然后,只需确保系统上或至少在您的应用文件夹中安装了 OpenSSL 1.0.2 或更早版本即可。

    目前有一个开放的pull request 为 Indy 添加 OpenSSL 1.1.x 支持,但我不知道它是否支持 OSX。你可以试试看。

    【讨论】:

    • 谢谢,雷米。我很高兴你认为错误信息是不言自明的......对我来说。 :) 我对 Indy 或互联网知之甚少。我只是第一次使用该组件。
    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多