공유 라이브러리 '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즉 , 일반적으로 이전 OS 버전에서 이전 버전의 라이브러리(2.34 이전)를 선택하거나 libdl.so수행 중인 작업을 알고 있는 경우 Makefile을 조정(명시적인 요구 사항을 제거하기 위해)해야 함을 의미합니다.

답변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에는 그것으로 충분합니다.

관련 정보