Delphi Indy idHTTP 导致 Mac 应用退出
Delphi Indy idHTTP causes Mac app to quit
在 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
错误信息是self-explanatory。 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。你可以试试看。
在 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
错误信息是self-explanatory。 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。你可以试试看。