Що роблять .dlls у програмах Linux?


20

Ігри, зроблені з Unity3D для Linux, містять .dllфайли в папці даних GameDataFolder/Managed.

Що дивно, тому що я думав, що Linux використовує .soфайли замість .dllфайлів.

(Це ж стосується і програм Android-Unity3D.)

Чому?

Відповіді:


25

Ігри, про які ви говорите, засновані на .NET Framework і працюють з Mono, що є безкоштовною та відкритою реалізацією .NET Framework від Microsoft.

Оскільки ці програми базуються на .NET, збірки мають розширення .dll. Таким чином, ви можете бачити файли DLL у папках.

Одна. .

Зверніть увагу, що у вас також є кілька безкоштовних програм (не тільки ігор) на основі Mono Framework, доступних у сховищах Ubuntu. Наприклад: Томбой.


11
Також зауважте, що ці DLL не є "справжніми" Windows DLL, а фактично складеними .NET байтовими кодами.
Sanya_Zol

5
Також зауважте, що розширення файлів, включаючи .dllта .so, в Linux не мають сенсу. Вони використовуються лише для нашої зручності.
code_dredd

1
@ray Ви можете пояснити? Я думав, що вони все ще є стандартом для передачі інформації про тип файлу, отже, вони безглузді?
FMaz

2
@FynnMazurkiewicz: Це швидше дещо відрізняються традиції дизайну, ніж єдиний центральний атрибут, який застосовує будь-яка система. Насправді і ядро Windows, і динамічний лінкер Linux із задоволенням завантажуватимуть спільну бібліотеку (у відповідних форматах), незалежно від того, чи закінчується її ім'я файлу у .dll чи .so чи щось інше. З історичних причин систематичний виклик LoadLibrary в Windows у деяких випадках додасть ".dll" до імені файлу, якщо воно вже не має розширення, але це не так, як зазвичай використовується .
Геннінг Макгольм

1
@ray не зовсім: gccгоді й шукати бібліотеку в комплект поставки , як , наприклад , -lmякщо його ім'я файлу не закінчується .soабо .aабо їх варіанти про версіях.
Руслан

9

Ці .dllфайли GameDataFolder/Managedналежать до рідної код програми , яка використовує Mono внутрішньо.

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

Крос-платформні виконувані файли та спільні бібліотеки, які можна запускати або .NET Common Language Runtime або Mono, часто називають .exeі .dllсуфіксами, навіть якщо вони не характерні для Windows. Коли ви знайдете .dllфайл у програмі для такої системи GNU / Linux, як Ubuntu, або для будь-якої ОС, окрім Windows, зазвичай це є причиною. Більшість випадків, коли ви знаходитесь .dllв системі Ubuntu, відповідь Голбота пояснює це. Але це не зовсім те, що тут відбувається.

Ігровий движок Unity - який не слід плутати з графічним інтерфейсом за замовчуванням в більшості випусків Ubuntu --is популярний фірмовий крос-платформний ігровий движок. Цей двигун не працює над .NET Framework або Mono. Натомість в нього вбудовується Mono , що означає, що Mono працює над ним. Ось так розробники пишуть будь-який код, який потрібна їх грі, що вже не є частиною двигуна Unity.

Як правило, Mono може використовуватися так само, як зазвичай використовується .NET CLR від Microsoft, для запуску повноцінних програм .NET / Mono. Але Mono також розроблений для того, щоб легко вбудовуватися у власні кодові програми , у тому числі для того, щоб вони могли налаштувати ці програми . Ось що відбувається в ситуації, яку ви описуєте. Файли, які ви бачите, не належать до програми, яка працює безпосередньо поверх Mono або .NET CLR. Натомість вони належать до програми з власним кодом, яка вбудовує Mono.

Як Unity Game Engine використовує моно

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

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

Інші ситуації, де ви можете бачити .dllфайли на Ubuntu

Описано дві ситуації, коли ви, ймовірно, побачите .dllфайл на Ubuntu:

  1. Спільна бібліотека, яка призначена для використання додатком .NET / Mono. Відповідь Голбота детально описує це. Це те, .dllщо ви бачите в системі 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, або яке ви встановлюєте автоматично зwinetricks для підтримки іншого програмного забезпечення Windows.

Це не спроба вичерпно перерахувати всі обставини, коли ви можете зіткнутися .dllз Ubuntu. (Наприклад, це може бути і бібліотека OS / 2. ) Однак я вважаю, що ці чотири випадки є найпоширенішими.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.