Что такое DLL-файлы в программах Linux?

16

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

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

(То же самое верно и для приложений Android-Unity3D.)

Почему?

    
задан IronPig 09.09.2017 в 10:22
источник

2 ответа

21

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

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

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

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

    
ответ дан Golboth 09.09.2017 в 10:53
источник
5

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

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

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

движок игры Unity - , который не следует путать с графический интерфейс по умолчанию в большинстве выпусков Ubuntu - популярный прогестрированный кросс-платформенный игровой движок. Этот движок запускает not поверх .NET Framework или Mono. Вместо он включает Mono , то есть Mono работает поверх него. Это то, как разработчики пишут любой код, необходимый для игры, который еще не является частью движка Unity.

В общем случае Mono может использоваться так же, как обычно используется CLR для Microsoft .NET, для запуска полных программ .NET / Mono. Но Mono также разработан, чтобы быть легко встраиваемым в приложения с собственным кодом , включая , чтобы эти приложения могли быть настроены . Это то, что происходит в ситуации, которую вы описываете. Файлы, которые вы видите, не принадлежат программе, которая выполняется непосредственно поверх Mono или .NET CLR. Вместо этого они относятся к программе нативного кода, которая включает Mono.

Как движок игры Unity использует Mono

Игровой движок Unity, который написан в основном на C ++, содержит свой собственный экземпляр Mono, который не использует - и может отличаться от версии (если она есть), установленной в диспетчере пакетов вашей системы. Эта встроенная среда исполнения Mono не может использоваться для запуска автономных программ .NET / Mono, поскольку это не является ее целью. Вместо этого часть собственного кода двигателя использует его для запуска кода CIL. (CIL является Common Intermediate Language , который является его официальным названием. Ранее он назывался MSIL или Microsoft Intermediate Language, поскольку Microsoft разработала это изначально.) Программисты, создающие игры, которые используют движок Unity, обычно пишут свой собственный код на C #, хотя поддерживаются некоторые другие языки.

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

Другие ситуации, где вы можете видеть .dll Files On Ubuntu

Описаны две ситуации, когда вы, вероятно, увидите файл .dll на Ubuntu:

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

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

  1. Компилятор для .NET Core производит .dll файлов, а не .exe файлов, даже когда то, что вы компилируете, не является библиотекой. Среда выполнения .NET Core (называемая CoreCLR) и not обычная .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 ). Однако я считаю, что эти четыре случая являются наиболее распространенными.

    
ответ дан Eliah Kagan 10.09.2017 в 01:55