프로젝트를 컴파일하려고 하는데 라이브러리 누락으로 인해 컴파일이 실패합니다.
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에는 그것으로 충분합니다.