共有ライブラリ「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にはそれで十分です。

関連情報