.dll 在 Linux 程序中起什么作用?

.dll 在 Linux 程序中起什么作用?

使用 Unity3D for Linux 制作的游戏.dll在其数据文件夹中包含文件GameDataFolder/Managed

这很奇怪,因为我认为 Linux 使用.so文件而不是.dll文件。

(对于 Android-Unity3D 应用程序来说也是如此。)

为什么?

答案1

您所谈论的游戏基于 .NET Framework 并通过 Mono 运行,Mono 是 Microsoft .NET Framework 的免费开源实现。

由于这些应用程序是基于 .NET 的,因此程序集具有 .dll 扩展名。因此您可以在文件夹中看到 DLL 文件。

一个专为跨平台使用而设计的 .NET 程序可以在 Windows、Linux 或 Mac 上运行,使用相同的“二进制文件”(包括也是程序集的 DLL),它们以 MSIL 编译,需要 .NET/Mono 运行时才能执行。

请注意,Ubuntu 存储库中还有一些基于 Mono Framework 的免费应用程序(不仅仅是游戏)。例如:Tomboy。

答案2

.dll中的文件属于GameDataFolder/Managed内部使用 Mono 的本机代码程序。

Unity 游戏引擎嵌入Mono(甚至在大多数 Windows 平台上)。

可由 .NET 公共语言运行时或 Mono 运行的跨平台可执行文件和共享库通常分别以.exe.dll后缀命名,即使它们不是特定于 Windows 的。当您在 GNU/Linux 系统(如 Ubuntu)或任何非 Windows 操作系统的程序中找到.dll文件时,这是通常为什么?大多数时候,你会发现.dll在 Ubuntu 系统中,Golboth 的答案解释它。但事实并非如此。

Unity 游戏引擎--不应与大多数 Ubuntu 版本中的默认图形界面——是一种流行的专有跨平台游戏引擎。这个引擎不是在.NET Framework 或 Mono 上运行。反而,它嵌入了 Mono也就是说 Mono 在其上运行。这就是开发人员编写游戏所需的任何代码的方式,而这些代码还不是 Unity 引擎的一部分。

总体而言,Mono 的使用方式与 Microsoft .NET CLR 的使用方式相同,可以运行完整的 .NET/Mono 程序。但 Mono 还被设计为易于可嵌入本机代码应用程序, 包括使这些应用程序能够定制。这就是您所描述的情况。您看到的文件不属于直接在 Mono 或 .NET CLR 上运行的程序。相反,它们属于嵌入 Mono 的本机代码程序。

Unity 游戏引擎如何使用 Mono

Unity 游戏引擎主要用 C++ 编写,它拥有自己的 Mono 实例,该实例不使用(并且可能与)通过系统包管理器安装的版本(如果有)不同。此嵌入式 Mono 运行时不能用于运行独立的 .NET/Mono 程序,因为这不是它的用途。相反,引擎的本机代码部分使用它来运行 CIL 代码。(CIL 是通用中间语言,这是它的正式名称。它以前被称为 MSIL 或 Microsoft Intermediate Language,因为它最初是由 Microsoft 开发的。)使用 Unity 引擎制作游戏的程序员通常用 C# 编写自己的代码,但也支持其他一些语言。

Unity 引擎甚至在 Windows 中嵌入了 Mono。为了通用 Windows 平台游戏——而不是其他平台——它使用 Microsoft .NET Framework 而不是 Mono。但大多数平台上的大多数 Unity 游戏(包括大多数移动设备和游戏机,包括 Ubuntu 和 Windows)都使用 Mono。在某些平台上IL2CPP可作为 Mono 的替代品,少数版本仅支持 IL2CPP。请参阅脚本限制了解详情。

.dll在 Ubuntu 上可能看到文件的其他情况

.dll已经描述了在 Ubuntu 上可能看到文件的两种情况:

  1. 旨在供 .NET/Mono 应用程序使用的共享库。Golboth 的答案详细描述了这一点。这是.dll您在 Ubuntu 系统上看到的大多数内容。它只是恰好不是.dllGameDataFolder/Managed文件夹中文件的用途。
  2. 提供代码的文件,供嵌入式 Mono 运行时使用,为本机代码应用程序提供“脚本”。这就是本例中的情况。

.dll在 Ubuntu 上还有另外两种相当常见的情况你也会看到文件:

  1. 编译器.NET 核心生成的是.dll文件而不是.exe文件,即使你编译的不是库。.NET Core 运行时(称为 CoreCLR)和不是常规 .NET Framework 或 Mono 运行这些文件。.NET Core 是 Microsoft 产品,但与标准 .NET Framework 不同,.NET Core 是跨平台的官方支持适用于 Ubuntu 等 GNU/Linux 系统,以及它是免费的开源软件
  2. 有时.dll您在 Ubuntu 上看到的文件只是一个 Windows 库。如果程序存储在 Ubuntu 系统中但在 Windows 上运行,或者您在 Ubuntu 中安装了 Windows 驱动器,您可能会看到这种情况。您还可能会在能够使用以下方式在 Ubuntu 上运行的程序中看到它葡萄酒包括 Wine 附带的软件或使用winetricks支持其他Windows软件。

本文并不试图详尽列出.dll在 Ubuntu 上可能遇到的所有情况。(例如,也可能是OS/2 库。)不过我认为这四种情况是最常见的。

相关内容