Answers:
您正在谈论的游戏基于.NET Framework并与Mono一起运行,Mono是Microsoft .NET Framework的免费开源实现。
因为这些应用程序基于.NET,所以程序集具有.dll扩展名。因此,您可以在文件夹中看到DLL文件。
设计用于跨平台使用的.NET程序可以在Windows,Linux或Mac上以相同的“二进制文件”(包括也是程序集的DLL)运行,这些程序在MSIL中进行编译,需要执行.NET / Mono运行时。
请注意,您还可以在Ubuntu存储库中找到一些基于Mono Framework的免费应用程序(不仅是游戏)。例如:假小子。
.dll
和).so
在Linux中没有意义。它们只是为了我们的方便而使用。
gcc
不会找到像如提供的库-lm
如果文件名不是结束.so
或.a
或版本控制的变体。
中的.dll
文件GameDataFolder/Managed
属于内部使用Mono的本机代码程序。
可以由.NET公共语言运行时或Mono运行的跨平台可执行文件和共享库通常分别带有.exe
和.dll
后缀,即使它们并非特定于Windows。当您.dll
在程序中找到适用于GNU / Linux系统(如Ubuntu)或Windows以外的任何操作系统的文件时,通常是原因。大多数情况下,您会.dll
在Ubuntu系统中找到,Golboth的答案对此做了解释。但这不是这里发生的一切。
在统一的游戏引擎 - 它不应该与混淆在大多数Ubuntu的发行版默认的图形界面 --is流行的自主研发的跨平台游戏引擎。该引擎不能在.NET Framework或Mono之上运行。相反,它嵌入Mono,也就是说Mono在其顶部运行。这就是开发人员如何编写其游戏所需的任何代码的方式,而这些代码尚未包含在Unity引擎中。
通常,可以使用与通常使用Microsoft .NET CLR相同的方式来使用Mono,以运行完整的.NET / Mono程序。但是,Mono还设计为易于嵌入本机代码应用程序中,包括使这些应用程序可以自定义。这就是您所描述的情况。您看到的文件不属于直接在Mono或.NET CLR之上运行的程序。相反,它们属于嵌入Mono的本机代码程序。
Unity游戏引擎主要使用C ++编写,它拥有自己的Mono实例,该实例不使用(也可能与通过系统的程序包管理器安装的版本(如果有)不同)。此嵌入式Mono运行时不能用于运行独立的.NET / Mono程序,因为这不是其目的。相反,引擎的本机代码部分使用它来运行CIL代码。(CIL是Common Intermediate Language,这是它的正式名称。自从Microsoft最初开发它以来,以前称为MSIL或Microsoft Intermediate Language。)使用Unity引擎制作游戏的程序员通常会用C#编写自己的代码,尽管有些其他语言也是如此。支持。
Unity引擎甚至在Windows中嵌入Mono。对于通用Windows平台游戏(无其他平台),它使用Microsoft .NET Framework代替Mono。但是大多数平台上的大多数Unity游戏,包括大多数移动设备和游戏机,包括Ubuntu和Windows,都使用Mono。在某些平台上,IL2CPP可作为Mono的替代产品,并且在少数平台上仅支持IL2CPP。有关详细信息,请参见脚本限制。
.dll
在Ubuntu上看到文件的其他情况描述了两种可能.dll
在Ubuntu上看到文件的情况:
.dll
您在Ubuntu系统上看到的大多数内容。只是碰巧不是.dll
文件GameDataFolder/Managed
夹中文件的用途。在其他两种合理的常见情况下,您可能会.dll
在Ubuntu上看到文件:
.dll
文件,而不是.exe
文件,即使您要编译的不是库也是如此。.NET Core运行时(称为CoreCLR)而非常规的.NET Framework或Mono运行这些文件。.NET Core是Microsoft的产品,但与标准.NET Framework不同,.NET Core是跨平台的,对GNU / Linux系统(如Ubuntu)具有官方支持,并且是免费的开源软件。.dll
您在Ubuntu上看到的文件只是Windows库。如果程序存储在Ubuntu系统中但在Windows上运行,或者在Ubuntu中挂载Windows驱动器,则可能会看到此消息。您可能还会看到它与可以使用Wine在Ubuntu上运行的程序相关联,包括Wine随附的软件或winetricks
为支持其他Windows软件而自动安装的软件。这并不是试图详尽列出.dll
在Ubuntu上可能遇到的所有情况。(例如,它也可能是是OS / 2库。)但是,我认为这四种情况是最常见的。