.net core 在Linux上使用SkiaSharep 1.68时发生DllNotFoundException

.net core 在Linux上使用SkiaSharep 1.68时发生DllNotFoundException,.net-core,skiasharp,.net Core,Skiasharp,在Linux上与.NET Core 2.2一起使用SkiaSharep 1.68.0,并在尝试对jpeg内存流使用解码时出现此错误(相同的代码在Windows上工作): 最内部的错误消息似乎是“没有这样的文件或目录”,这很奇怪,因为我正在解码内存流。在我升级到.NETCore2.2和最新的SkiaSharep之前,它在Windows和Linux上都能工作 我尝试过按照错误消息中的建议设置LD_DEBUG env变量,但效果不太好。真的不知道该设置什么。尝试了“全部”,但没有生成任何更详细的日志

在Linux上与.NET Core 2.2一起使用SkiaSharep 1.68.0,并在尝试对jpeg内存流使用解码时出现此错误(相同的代码在Windows上工作):

最内部的错误消息似乎是“没有这样的文件或目录”,这很奇怪,因为我正在解码内存流。在我升级到.NETCore2.2和最新的SkiaSharep之前,它在Windows和Linux上都能工作

我尝试过按照错误消息中的建议设置LD_DEBUG env变量,但效果不太好。真的不知道该设置什么。尝试了“全部”,但没有生成任何更详细的日志

找到一个建议安装SkiaSharp.NativeAssets.Linux作为解决方案的解决方案,但不幸的是,这没有帮助。构建/发布时是否需要以Linux-x64运行时为目标?尝试了不同的组合,但没有发现任何差异。(我使用dotnet cli在Linux上构建Docker文件,使用putty通过ssh。几乎是由VS:latest生成的默认Docker文件)


另一个建议是手动安装
libSkiaSharp.so
以及
apt get install libfontconfig1
,但不幸的是,apt get在Synology DSM上不可用。

我在Linux上使用.Net Core 2.2运行SkiaSharp时遇到了同样的问题

首先,我安装了NuGet软件包skiaSharep.NativeAssets.Linux(您在上面提到过),并确保libskiaSharep.so文件被复制到与其余DLL相同的目录中

我仍然收到了错误

接下来,我将一个shell连接到容器,并使用以下命令列出了依赖项:
ldd libSkiaSharp.so

我发现我丢失了libfreetype6libfontconfig1

由于我的环境使用Docker,我只添加了一些命令,以便在Docker文件中安装这些额外的依赖项:

来自microsoft/dotnet:aspnetcore运行时

运行apt获取更新
运行apt get install-y libfreetype6
运行apt get install-y libfontconfig1

现在该应用程序可以工作了


能否尝试将这些命令添加到Docker文件中?

安装Linux dependency NuGet软件包将解决此问题
SkiaSharp.NativeAssets.Linux.nodependency

谢谢您的解决方案。您说“并确保libSkiaSharp.so文件被复制到与其他DLL相同的目录中”,我不知道是否需要额外的步骤来实现这一点,但没有,这些文件只是在它们所属的地方结束。我面临着类似的问题,并且能够使用类似的解决方案。我测试了这两个步骤都是必要的,它们都不能单独解决问题。在我的例子中,使用apt get只安装
libfontconfig1
就足够了,我不需要安装另一个库。仅供参考:有一个新版本的SkiaSharep,它没有任何依赖项,对Synology也非常有效,无需安装任何字体库(适用于调整图像大小,但不支持文本渲染)
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)