web-dev-qa-db-fra.com

Que font les fichiers .dll dans les programmes Linux?

Les jeux créés avec Unity3D pour Linux contiennent des fichiers .dll dans leur dossier de données GameDataFolder/Managed.

Ce qui est étrange, car je pensais que Linux utilisait des fichiers .so au lieu de fichiers .dll.

(Il en va de même pour les applications Android-Unity3D.)

Pourquoi?

20
IronPig

Les jeux dont vous parlez sont basés sur le .NET Framework et s'exécutent avec Mono, une implémentation gratuite et à code source ouvert du .NET Framework de Microsoft.

Comme ces applications sont basées sur .NET, les assemblys ont une extension .dll. Ainsi, vous pouvez voir les fichiers DLL dans les dossiers.

Un programme .NET conçu pour une utilisation multiplate-forme peut fonctionner sous Windows, Linux ou Mac, avec les mêmes "fichiers binaires" (y compris les DLL qui sont également des assemblys), compilés dans MSIL et nécessitant l'exécution d'un environnement d'exécution .NET/Mono. .

Veuillez noter que vous avez également des applications gratuites (pas seulement des jeux) basées sur Mono Framework disponibles dans les référentiels Ubuntu. Par exemple: Tomboy.

25
Golboth

Les fichiers .dll dans GameDataFolder/Managed appartiennent à un programme de code natif qui utilise Mono en interne.

Le moteur de jeu Unity embeds Mono (même sur la plupart des plates-formes Windows).

Les exécutables multiplates-formes et les bibliothèques partagées pouvant être exécutées à l'aide du .NET Common Language Runtime ou de Mono sont souvent nommés avec les suffixes .exe et .dll, respectivement, même s'ils ne sont pas spécifiques à Windows. Lorsque vous trouvez un fichier .dll dans un programme pour un système GNU/Linux comme Ubuntu, ou pour tout système d'exploitation autre que Windows, il s'agit de généralement pourquoi. La plupart du temps, vous trouvez un .dll dans un système Ubuntu, réponse de Golboth l'explique. Mais ce n'est pas tout à fait ce qui se passe ici.

Le moteur de jeu de Unity - qui ne doit pas être confondu avec l'interface graphique par défaut de la plupart des versions d'Ubunt - est un populaire moteur de jeu multi-plateformes propriétaire. Ce moteur fonctionne not s’exécute au-dessus de .NET Framework ou Mono. À la place, il incorpore Mono , ce qui signifie que Mono s'exécute par dessus. C'est ainsi que les développeurs écrivent le code dont leur jeu a besoin et qui ne fait pas déjà partie du moteur Unity.

En général, Mono peut être utilisé de la même façon que le CLR .NET de Microsoft est généralement utilisé pour exécuter des programmes .NET/Mono complets. Mais Mono est également conçu pour être facilement intégrable dans les applications de code natif , y compris pour permettre à ces applications d'être personnalisées . C'est ce qui se passe dans la situation que vous décrivez. Les fichiers que vous voyez n'appartiennent pas à un programme qui s'exécute directement sur Mono ou sur le .NET CLR. Au lieu de cela, ils appartiennent à un programme en code natif intégrant Mono.

Comment le moteur de jeu Unity utilise Mono

Le moteur de jeu Unity, principalement écrit en C++, héberge sa propre instance de Mono, qui n'utilise pas - et peut être différente de - la version (le cas échéant) installée via le gestionnaire de packages de votre système. Ce moteur d'exécution Mono intégré ne peut pas être utilisé pour exécuter des programmes .NET/Mono autonomes, car ce n'est pas son objectif. Au lieu de cela, la partie de code natif du moteur l'utilise pour exécuter le code CIL. (CIL est Common Intermediate Language , qui est son nom officiel. Il s'appelait auparavant MSIL ou Microsoft Intermediate Language, car Microsoft l'avait développé à l'origine.) Les programmeurs qui créent des jeux utilisant le moteur Unity écrivent généralement leur propre code. en C #, bien que d'autres langues soient supportées.

Le moteur Unity intègre Mono même dans Windows. == Pour la plate-forme universelle Windows - et aucune autre plate-forme - il utilise Microsoft .NET Framework au lieu de Mono. Mais la majorité des jeux Unity sur la plupart des plateformes, y compris la plupart des appareils mobiles et des consoles de jeu, et notamment Ubuntu et Windows, utilisent Mono. Sur certaines plates-formes, IL2CPP est disponible en alternative à Mono, et sur quelques-unes seulement, IL2CPP est pris en charge. Voir Restrictions de script pour plus de détails.

Autres situations où vous pouvez voir des fichiers .dll sur Ubuntu

Deux situations dans lesquelles vous êtes susceptible de voir un fichier .dll sur Ubuntu ont été décrites:

  1. Bibliothèque partagée destinée à être utilisée par une application .NET/Mono. La réponse de Golboth décrit cela en détail. C’est ce que la plupart des .dlls que vous verrez sur un système Ubuntu sont. Ce n’est tout simplement pas ce à quoi servent les fichiers .dll de votre dossier GameDataFolder/Managed.
  2. Un fichier fournissant un code utilisé par un environnement d'exécution Mono intégré pour fournir un "script" pour une application de code natif. C'est ce qui se passe dans ce cas.

Il existe deux autres cas assez courants où vous pouvez voir un fichier .dll sur Ubuntu:

  1. Le compilateur de . NET Core génère des fichiers .dll plutôt que des fichiers .exe, même si ce que vous compilez n'est pas une bibliothèque. Le runtime .NET Core (appelé CoreCLR) et not le .NET Framework ou Mono standard exécutent ces fichiers. .NET Core est un produit Microsoft, mais contrairement au .NET Framework standard, .NET Core est multi-plateforme avec support officiel pour les systèmes GNU/Linux comme Ubuntu, et - c'est un logiciel open source gratuit .
  2. Parfois, un fichier .dll que vous voyez sur Ubuntu sera simplement une bibliothèque Windows. Vous pouvez voir cela si le programme est stocké sur un système Ubuntu mais s'exécute sous Windows, ou si vous montez un lecteur Windows dans Ubuntu. Vous pouvez également le voir en relation avec des programmes pouvant être exécutés sur Ubuntu avec Wine , y compris les logiciels fournis avec Wine ou installés automatiquement avec winetricks Logiciel Windows.

Ce n’est pas une tentative de lister de manière exhaustive toutes les circonstances dans lesquelles vous pourriez rencontrer un .dll sur Ubuntu. (Par exemple, il pourrait également s'agir de ne bibliothèque OS/2 .) Cependant, je pense que ces quatre cas sont les plus courants.

9
Eliah Kagan