Что делают.dll в программах Linux?

Игры, которые были сделаны с Unity3D для Linux, содержат .dll файлы в папке с данными GameDataFolder/Managed,

Что странно, потому что я думал, что Linux использует .so файлы вместо .dll файлы.

(То же самое относится и к приложениям Android-Unity3D.)

Зачем?

2 ответа

Решение

Игры, о которых вы говорите, основаны на.NET Framework и работают с Mono, которая является бесплатной реализацией Microsoft.NET Framework с открытым исходным кодом.

Поскольку эти приложения основаны на.NET, сборки имеют расширение.dll. Таким образом, вы можете увидеть файлы DLL в папках.

Одна программа.NET, предназначенная для кроссплатформенного использования, может запускаться в Windows, Linux или Mac с теми же "двоичными файлами" (включая библиотеки DLL, которые также являются сборками), которые скомпилированы в MSIL и требуют выполнения среды выполнения.NET/Mono.,

Обратите внимание, что у вас также есть несколько бесплатных приложений (не только игр) на основе Mono Framework, доступных в репозиториях Ubuntu. Например: сорванец.

.dll файлы в GameDataFolder/Managed принадлежат к программе с собственным кодом, которая использует Mono для внутреннего использования.

Игровой движок Unity встраивает Mono (даже на большинстве платформ Windows).

Кроссплатформенные исполняемые файлы и разделяемые библиотеки, которые могут запускаться в среде.NET Common Language Runtime или Mono, часто называются .exe а также .dll суффиксы, соответственно, даже если они не являются специфичными для Windows. Когда вы найдете .dll Файл в программе для системы GNU/Linux, такой как Ubuntu, или для любой операционной системы, кроме Windows, обычно это и есть причина. Большую часть времени вы найдете .dll в ответе Голбота в системе Ubuntu это объясняется.Но это не совсем то, что здесь происходит.

Игровой движок 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 - это https://en.wikipedia.org/wiki/Common_Intermediate_Language, который является его официальным названием. Ранее он назывался MSIL или Microsoft Intermediate Language, так как Microsoft разработала его изначально.) Программисты, делающие игры, использующие движок Unity, обычно пишут свой собственный код на C#, хотя некоторые другие языки поддерживаются.

Движок Unity встраивает Mono даже в Windows. Для игр на универсальной платформе Windows - и никаких других платформ - вместо моно используется Microsoft .NET Framework. Но большинство игр Unity на большинстве платформ, включая большинство мобильных устройств и игровых консолей, а также Ubuntu и Windows, используют Mono. На некоторых платформах IL2CPP доступен в качестве альтернативы Mono, а на некоторых поддерживается только IL2CPP. См. Сценарии ограничения для деталей.

Другие ситуации, где вы можете увидеть.dllФайлы на Ubuntu

Две ситуации, когда вы можете увидеть.dllфайл на Ubuntu были описаны:

  1. Общая библиотека, предназначенная для использования приложением.NET/Mono. В ответе Голбота это подробно описано. Это то, что большинство .dll s вы увидите в системе Ubuntu. Просто не бывает того, что.dllфайлы в вашемGameDataFolder/Managedпапка для.
  2. Файл, предоставляющий код, который используется встроенной средой Mono для предоставления "сценариев" для приложения с собственным кодом. Вот что происходит в этом случае.

Есть два других достаточно распространенных случая, когда вы можете увидеть.dllфайл в Ubuntu:

  1. Компилятор для .NET Core выдает .dllфайлы, а не.exe файлы, даже если то, что вы компилируете, не является библиотекой. Эти файлы запускаются средой выполнения.NET Core (называемой CoreCLR), а не обычной.NET Framework или Mono. .NET Core - это продукт Microsoft, но в отличие от стандартного.NET Framework, .NET Core является кросс-платформенным с официальной поддержкой систем GNU/Linux, таких как Ubuntu, и является бесплатным программным обеспечением с открытым исходным кодом.
  2. Иногда.dllФайл, который вы видите в Ubuntu, будет просто библиотекой Windows. Вы можете увидеть это, если программа хранится в системе Ubuntu, но работает в Windows, или если вы монтируете диск Windows в Ubuntu. Это также может быть связано с программами, которые можно запускать в Ubuntu с помощью Wine, в том числе с программным обеспечением, которое поставляется вместе с Wine или которое вы устанавливаете автоматически сwintricks для поддержки другого программного обеспечения Windows.

Это не попытка исчерпывающего перечисления всех обстоятельств, при которых вы можете столкнуться с .dll на Ubuntu. (Например, это также может быть библиотека OS / 2.) Однако я считаю, что эти четыре случая являются наиболее распространенными.

Другие вопросы по тегам