1

在 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
4

1 回答 1

2

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

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

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

于 2020-10-17T18:16:13.303 回答