无法加载共享库“libdl.so”或其依赖项之一

无法加载共享库“libdl.so”或其依赖项之一

我正在尝试编译一个项目,但由于缺少库而编译失败。

System.DllNotFoundException: Unable to load shared library 'libdl.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibdl.so: cannot open shared object file: No such file or directory
 at Assimp.Unmanaged.UnmanagedLibrary.UnmanagedLinuxLibraryImplementation.dlopen(String fileName, Int32 flags)
 at Assimp.Unmanaged.UnmanagedLibrary.UnmanagedLinuxLibraryImplementation.NativeLoadLibrary(String path)
 at Assimp.Unmanaged.UnmanagedLibrary.UnmanagedLibraryImplementation.LoadLibrary(String path)
 at Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary(String libPath)
 at Assimp.Unmanaged.UnmanagedLibrary.LoadLibrary()
 at Assimp.Unmanaged.UnmanagedLibrary.LoadIfNotLoaded()
 at Assimp.Unmanaged.AssimpLibrary.CreatePropertyStore()
 at Assimp.AssimpContext.CreateConfigs()
 at Assimp.AssimpContext.PrepareImport()
 at Assimp.AssimpContext.ImportFile(String file, PostProcessSteps postProcessFlags)
 at Microsoft.Xna.Framework.Content.Pipeline.OpenAssetImporter.Import(String filename, ContentImporterContext context) in C:\BuildAgents\MonoGameWin1\work\f7381a85a626990\MonoGame.Framework.Content.Pipeline\OpenAssetImporter.cs:line 291
 at Microsoft.Xna.Framework.Content.Pipeline.FbxImporter.Import(String filename, ContentImporterContext context) in C:\BuildAgents\MonoGameWin1\work\f7381a85a626990\MonoGame.Framework.Content.Pipeline\FbxImporter.cs:line 24
 at Microsoft.Xna.Framework.Content.Pipeline.ContentImporter`1.Microsoft.Xna.Framework.Content.Pipeline.IContentImporter.Import(String filename, ContentImporterContext context) in C:\BuildAgents\MonoGameWin1\work\f7381a85a626990\MonoGame.Framework.Content.Pipeline\ContentImporter.cs:line 45
 at MonoGame.Framework.Content.Pipeline.Builder.PipelineManager.ProcessContent(PipelineBuildEvent pipelineEvent) in C:\BuildAgents\MonoGameWin1\work\f7381a85a626990\MonoGame.Framework.Content.Pipeline\Builder\PipelineManager.cs:line 669

我一直在 github、Google、Stackoverflow、askubuntu 和此处的 MonoGame 问题跟踪器中搜索已知的解决方案。

检查我的系统时该文件是否确实存在sudo find / -iname libdl.so但未找到该文件。然而/usr/lib/i386-linux-gnu,我可以在里面/usr/lib/x86_64-linux-gnu找到一个libdl.so.2听起来相关的文件。

https://packages.ubuntu.com/search?suite=trusty&arch=any&searchon=contents&keywords=libdl.so我可以看到该libdl.so文件包含在libc6-dev我已经安装的软件包中,但作为绝望的举动重新安装却没有任何运气。

这是结果sudo apt-config dump | grep APT::Architecture

APT::Architecture "amd64";
APT::Architectures "";
APT::Architectures:: "amd64";
APT::Architectures:: "i386";

这是结果dpkg-query --list libc6

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version         Architecture Description
+++-==============-===============-============-=================================
ii  libc6:amd64    2.34-0ubuntu3.2 amd64        GNU C Library: Shared libraries
ii  libc6:i386     2.34-0ubuntu3.2 i386         GNU C Library: Shared libraries

我正在运行 Pop!_OS 21.10 64 位。

我可以做什么来获取该libdl.so文件,甚至可以以健康且受支持的方式获取该文件?

答案1

第一步,您应该检查构建需要哪些库(具有确切的版本)。

dl库现在是 C 标准库的一部分。这发行说明,告诉你,从版本 2.34 开始,这是你的,

...以前在 libpthread、libdl、libutil、libanl 库中实现的所有功能都已集成到 libc 中。新应用程序不再需要与 -lpthread、-ldl、-lutil、-lanl 链接。为了向后兼容,提供了空静态档案 libpthread.a、libdl.a、libutil.a、libanl.a,以便链接器选项继续工作。已链接到 glibc 2.33 或更早版本的应用程序将继续加载相应的共享对象(现在为空)。

这意味着您必须选择较旧版本的libc库(2.34 之前),通常在较旧的操作系统版本上,或者如果您知道自己在做什么,请调整您的 Makefile(以删除明确的libdl.so要求)。

答案2

您可以简单地创建一个符号链接,如下所示:

$ whereis libdl.so.2
libdl.so.2: /usr/lib/libdl.so.2 /usr/lib32/libdl.so.2
$ sudo ln -s /usr/lib/libdl.so.2 /usr/lib/libdl.so
$ sudo ln -s /usr/lib32/libdl.so.2 /usr/lib32/libdl.so

就我而言,这对于 MonoGame 来说已经足够了。

相关内容