Что делают.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 были описаны:
- Общая библиотека, предназначенная для использования приложением.NET/Mono. В ответе Голбота это подробно описано. Это то, что большинство
.dll
s вы увидите в системе Ubuntu. Просто не бывает того, что.dll
файлы в вашемGameDataFolder/Managed
папка для. - Файл, предоставляющий код, который используется встроенной средой Mono для предоставления "сценариев" для приложения с собственным кодом. Вот что происходит в этом случае.
Есть два других достаточно распространенных случая, когда вы можете увидеть.dll
файл в Ubuntu:
- Компилятор для .NET Core выдает
.dll
файлы, а не.exe
файлы, даже если то, что вы компилируете, не является библиотекой. Эти файлы запускаются средой выполнения.NET Core (называемой CoreCLR), а не обычной.NET Framework или Mono. .NET Core - это продукт Microsoft, но в отличие от стандартного.NET Framework, .NET Core является кросс-платформенным с официальной поддержкой систем GNU/Linux, таких как Ubuntu, и является бесплатным программным обеспечением с открытым исходным кодом. - Иногда
.dll
Файл, который вы видите в Ubuntu, будет просто библиотекой Windows. Вы можете увидеть это, если программа хранится в системе Ubuntu, но работает в Windows, или если вы монтируете диск Windows в Ubuntu. Это также может быть связано с программами, которые можно запускать в Ubuntu с помощью Wine, в том числе с программным обеспечением, которое поставляется вместе с Wine или которое вы устанавливаете автоматически сwintricks
для поддержки другого программного обеспечения Windows.
Это не попытка исчерпывающего перечисления всех обстоятельств, при которых вы можете столкнуться с .dll
на Ubuntu. (Например, это также может быть библиотека OS / 2.) Однако я считаю, что эти четыре случая являются наиболее распространенными.