在Linux上使用SkiaSharp 1.68.0和.NET Core 2.2,在尝试使用Decode解码jpeg内存流时出现错误(相同的代码在Windows上运行正常):
System.TypeInitializationException: The type initializer for 'SkiaSharp.SKAbstractManagedStream' 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: liblibSkiaSharp: cannot open shared object file: No such file or directory
at SkiaSharp.SkiaApi.sk_managedstream_set_delegates(IntPtr pRead, IntPtr pPeek, IntPtr pIsAtEnd, IntPtr pHasPosition, IntPtr pHasLength, IntPtr pRewind, IntPtr pGetPosition, IntPtr pSeek, IntPtr pMove, IntPtr pGetLength, IntPtr pCreateNew, IntPtr pDestroy)
at SkiaSharp.SKAbstractManagedStream..cctor()
--- End of inner exception stack trace ---
at SkiaSharp.SKAbstractManagedStream..ctor(Boolean owns)
at SkiaSharp.SKManagedStream..ctor(Stream managedStream, Boolean disposeManagedStream, Boolean owns)
at SkiaSharp.SKManagedStream..ctor(Stream managedStream, Boolean disposeManagedStream)
at SkiaSharp.SKCodec.WrapManagedStream(Stream stream)
at SkiaSharp.SKCodec.Create(Stream stream, SKCodecResult& result)
at SkiaSharp.SKCodec.Create(Stream stream)
at SkiaSharp.SKBitmap.Decode(Stream stream)
内部错误信息似乎是“没有这样的文件或目录”,这很奇怪,因为我正在解码内存流。这在Windows上有效,在升级到.NET Core 2.2和最新的SkiaSharp之前,它也在Linux上运行过。
我尝试设置LD_DEBUG环境变量,如错误消息中建议的那样,但没有什么作用。不确定应该设置什么。尝试了“all”,但没有更详细的日志结果。
找到一个thread,建议安装SkiaSharp.NativeAssets.Linux作为解决方案,但不幸的是这并没有帮助。我需要针对Linux-x64 runtime进行构建/发布吗?尝试了不同的组合,但没有发现任何区别。(我在通过putty的Linux上使用dotnet cli在Docker-file中构建,几乎是由VS:latest生成的默认Docker-file)
另一个建议是手动安装libSkiaSharp.so和apt-get install libfontconfig1,但不幸的是Synology DSM上没有apt-get。
libfontconfig1
就足够了,我不需要安装其他库。 - Vesa Vainio