有什么方法可以在 arm64 环境中 运行 一个 Avalonia 应用程序吗?

Is there any way to run an Avalonia app in an arm64 environment?

我最近给自己买了一部 PinePhone,并决定试用 .NET Core 5。我选择使用 Avalonia 是因为它标榜的跨平台特性。我将应用程序部署到我的 phone 并遇到了错误:

Unhandled exception. System.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.
 ---> System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: Error loading shared library liblibSkiaSharp: No such file or directory
   at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
   at SkiaSharp.SKImageInfo..cctor()
   --- End of inner exception stack trace ---
   at Avalonia.Skia.PlatformRenderInterface..ctor(ISkiaGpu skiaGpu, Nullable`1 maxResourceBytes)
   at Avalonia.Skia.SkiaPlatform.Initialize(SkiaOptions options)
   at Avalonia.SkiaApplicationExtensions.<>c__0`1.<UseSkia>b__0_0()
   at Avalonia.Controls.AppBuilderBase`1.Setup()
   at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime)
   at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode)
   at DummyCounter.Program.Main(String[] args)
Aborted

奇怪的是,libSkiaSharp.so 库文件与可执行文件位于同一文件夹中。该文件夹是通过下面的 dotnet publish 命令创建的:

dotnet publish -r alpine-arm64 DummyCounter -o ./publish

我尝试了一些不同的东西,将架构更改为 linux-musl-arm64,将应用程序部署为独立 and/or 单文件,但我仍然得到完全相同的结果结果。有人以前见过这样的东西吗?

ARM64 Linux 支持开箱即用。然而,ARM64 Alpine Linux 需要自定义构建 SkiaSharp,因为与其他 Linux 发行版不同,Alpine 使用的是非标准版本的 libc。

所以要么切换到更主流的东西,要么按照说明构建 SkiaSharp - https://github.com/mono/SkiaSharp/wiki/Building-on-Linux

几周前,我在 Pinephone 运行 postmarketOS 上用相同的代码重新审视了这个问题。所要做的只是在 Avalonia 2022 移动版本之后将所有软件包(包括 SkiaSharp 依赖项)更新到最新版本。我什至写了一篇博客 post 来庆祝:https://www.codingnagger.com/2022/04/19/at-last-the-dummy-counter-runs-on-postmarketos/