web-dev-qa-db-ja.com

Linuxプログラムで.dllは何をしていますか?

Unity3D for Linuxで作成されたゲームには、データフォルダー.dllGameDataFolder/Managedファイルが含まれています。

Linuxが.soファイルの代わりに.dllファイルを使用すると思ったため、これは奇妙です。

(Android-Unity3Dアプリにも同じことが言えます。)

どうして?

20
IronPig

あなたが話しているゲームは、.NET Frameworkに基づいており、Microsoftの.NET Frameworkの無料でオープンソースの実装であるMonoで実行されています。

これらのアプリケーションは.NETベースであるため、アセンブリの拡張子は.dllです。そのため、フォルダー内のDLLファイルを確認できます。

クロスプラットフォーム用に設計された1つの.NETプログラムは、MSILでコンパイルされ、.NET/Monoランタイムを実行する必要がある、同じ「バイナリ」(アセンブリでもあるDLLを含む)でWindows、Linux、またはMacで実行できます。 。

また、Ubuntuリポジトリで利用可能なMono Frameworkに基づいた無料のアプリケーション(ゲームだけでなく)もいくつかあることに注意してください。例:おてんば娘。

25
Golboth

.dllGameDataFolder/Managedファイルは、Monoを内部的に使用するネイティブコードプログラムに属します。

UnityゲームエンジンembedsMono(ほとんどのWindowsプラットフォームでも)。

.NET共通言語ランタイムまたはMonoで実行できるクロスプラットフォームの実行可能ファイルと共有ライブラリは、Windows固有ではない場合でも、それぞれ.exeおよび.dllのサフィックスが付けられていることがよくあります。 UbuntuのようなGNU/Linuxシステム、またはWindows以外のOSのプログラムで.dllファイルを見つけると、これが通常理由です。ほとんどの場合、Ubuntuシステムで.dllを見つけます。 Golbothの答え で説明されています。 しかし、それはここで起こっていることとはまったく異なります。

nityゲームエンジン -と混同しないでください ほとんどのUbuntuリリースのデフォルトのグラフィカルインターフェイス-人気のある独自のクロスプラットフォームゲームエンジン。 このエンジンはnot.NET FrameworkまたはMono上で実行します 代わりに、 it Mono を埋め込みます。つまり、Monoはその上で実行されます。これは、開発者が、Unityエンジンの一部ではないゲームに必要なコードを作成する方法です。

一般に、Monoは、Microsoftの.NET CLRが通常使用されるのと同じ方法で使用され、完全な.NET/Monoプログラムを実行します。しかし、Monoは ネイティブコードアプリケーションに埋め込み可能 を含むように設計されています これらのアプリケーションをカスタマイズできるようにするため 。それはあなたが説明している状況で起こっていることです。表示されているファイルは、Monoまたは.NET CLRの上で直接実行されるプログラムに属していません。代わりに、Monoを埋め込むネイティブコードプログラムに属します。

UnityゲームエンジンがMonoを使用する方法

ほとんどがC++で記述されているUnityゲームエンジンは、Monoの独自のインスタンスをホストします。Monoは、システムのパッケージマネージャーからインストールされたバージョン(存在する場合)を使用せず、異なる場合があります。この組み込みMonoランタイムは、目的ではないため、スタンドアロンの.NET/Monoプログラムの実行には使用できません。代わりに、エンジンのネイティブコード部分はそれを使用してCILコードを実行します。 (CILは Common Intermediate Language の正式名です。Microsoftが最初に開発したため、以前はMSILまたはMicrosoft Intermediate Languageと呼ばれていました。)Unityエンジンを使用するゲームを作成するプログラマーは通常、独自のコードを記述しますC#では、いくつかの他の言語がサポートされています。

UnityエンジンはWindowsにもMonoを埋め込みますFor niversal Windows Platform games --- and other platform --- use the Microsoft .NET Framework代わりにモノ。しかし、ほとんどのモバイルデバイスやゲームコンソール、UbuntuやWindowsなど、ほとんどのプラットフォーム上のUnityゲームの大部分はMonoを使用しています。一部のプラットフォームでは IL2CPP がMonoの代替として利用可能であり、一部のプラットフォームではIL2CPPのみがサポートされています。詳細については、 スクリプトの制限 を参照してください。

Ubuntuで.dllファイルが表示されるその他の状況

Ubuntuで.dllファイルが表示される可能性が高い2つの状況について説明しました。

  1. .NET/Monoアプリケーションで使用することを目的とした共有ライブラリ。 Golbothの答え これについて詳しく説明しています。これは、Ubuntuシステムで表示されるほとんどの.dllsです。 .dllフォルダー内のGameDataFolder/Managedファイルが何のためにあるのかは偶然ではありません。
  2. 組み込みMonoランタイムが使用するコードを提供するファイル。ネイティブコードアプリケーションに「スクリプト」を提供します。それがこの場合に起こっていることです。

Ubuntuで.dllファイルが表示される可能性がある他の2つの合理的に一般的なケースがあります。

  1. 。NET Core のコンパイラーは、コンパイル対象がライブラリーでない場合でも、.dllファイルではなく.exeファイルを生成します。 .NET Coreランタイム(CoreCLRと呼ばれる)、およびnot通常の.NET FrameworkまたはMonoは、これらのファイルを実行します。 .NET CoreはMicrosoft製品ですが、標準の.NET Frameworkとは異なり、 。NET Coreはクロスプラットフォーム with 公式サポート UbuntuなどのGNU/Linuxシステムの場合- 無料のオープンソースソフトウェアです
  2. Ubuntuで表示される.dllファイルは、Windowsライブラリになる場合があります。これは、プログラムがUbuntuシステムに格納されているがWindowsで実行されている場合、またはUbuntuでWindowsドライブをマウントしている場合に表示されます。また、 Wine を使用してUbuntuで実行できるプログラムに関連して表示される場合があります。これには、Wineに付属するソフトウェアまたは winetricks を使用して他のWindowsソフトウェア。

これは、Ubuntuで.dllに遭遇する可能性のあるすべての状況を網羅的にリストする試みではありません。 (たとえば、 OS/2ライブラリ でも構いません。)しかし、これらの4つのケースは最も一般的なケースだと思います。

9
Eliah Kagan