首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DllNotFoundException在Linux上使用SkiaSharp 1.68

DllNotFoundException在Linux上使用SkiaSharp 1.68
EN

Stack Overflow用户
提问于 2018-12-09 13:53:00
回答 2查看 5.6K关注 0票数 6

在Linux上使用SkiaSharp 1.68.0和.NET Core2.2,并在jpeg内存流上使用解码时获得此错误(相同的代码在.NET上工作):

代码语言:javascript
复制
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) 

最内部的错误消息似乎是“没有这样的文件或目录”,这是奇怪的,因为我正在解码一个内存流。在我升级到.NET Core2.2和最新的SkiaSharp之前,它已经在Linux上工作了。

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

找到了一个建议将线程安装为解决方案的SkiaSharp.NativeAssets.Linux,但不幸的是,这并没有帮助。构建/发布时是否需要针对Linux64运行时?尝试了不同的组合,但没有发现任何不同。(我正在Linux和putty的Docker文件中构建dotnet。几乎默认的Docker文件,如VS:最新生成的)

另一个建议是手动安装libSkiaSharp.so,也安装apt-get install libfontconfig1,但遗憾的是,Synology上没有apt。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-05 11:49:06

我在LinuxCore2.2上运行SkiaSharp时也遇到了同样的问题。

首先,我安装了NuGet包SkiaSharp.NativeAssets.Linux (如上面提到的),并确保将libSkiaSharp.so文件复制到与其他DLL相同的目录中。

我还是收到了错误。

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

我发现我错过了libfontconfig1.和libfreetype6

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

FROM microsoft/dotnet:aspnetcore-runtime RUN apt-get update RUN apt-get install -y libfreetype6 RUN apt-get install -y libfontconfig1

现在,应用程序可以工作了。

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

票数 7
EN

Stack Overflow用户

发布于 2020-07-17 14:34:25

安装Linux依赖项NuGet包将解决这个问题SkiaSharp.NativeAssets.Linux.NoDependencies https://www.nuget.org/packages/SkiaSharp.NativeAssets.Linux.NoDependencies

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53693042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档