Los juegos que se hicieron con Unity3D para Linux contienen .dll
archivos en su carpeta de datos GameDataFolder/Managed
.
Lo cual es extraño porque pensé que Linux usa .so
archivos en lugar de .dll
archivos.
(Lo mismo es cierto para las aplicaciones Android-Unity3D también).
¿Por qué?
fuente
.dll
y.so
, no tienen sentido en Linux. Solo se usan para nuestra conveniencia.gcc
no encontrarán una biblioteca suministrado como por ejemplo,-lm
si el nombre del archivo no termina con.so
o.a
o versionado variantes de las mismas.Los
.dll
archivosGameDataFolder/Managed
pertenecen a un programa de código nativo que usa Mono internamente.El motor del juego Unity incorpora Mono (incluso en la mayoría de las plataformas Windows).
Los ejecutables multiplataforma y las bibliotecas compartidas que pueden ejecutarse con .NET Common Language Runtime o Mono a menudo se nombran con
.exe
y.dll
sufijos, respectivamente, incluso cuando no son específicos de Windows. Cuando encuentra un.dll
archivo en un programa para un sistema GNU / Linux como Ubuntu, o para cualquier sistema operativo que no sea Windows, generalmente es por eso. La mayoría de las veces encuentras un.dll
en un sistema Ubuntu, la respuesta de Golboth lo explica. Pero eso no es exactamente lo que está pasando aquí.El motor del juego Unity , que no debe confundirse con la interfaz gráfica predeterminada en la mayoría de las versiones de Ubuntu, es un popular motor de juegos multiplataforma patentado. Este motor no se ejecuta sobre .NET Framework o Mono. En cambio, incorpora Mono , lo que quiere decir que Mono se ejecuta encima de él. Así es como los desarrolladores escriben el código que su juego necesita que no forma parte del motor de Unity.
En general, Mono se puede usar de la misma manera que se usa .NET CLR de Microsoft, para ejecutar programas completos de .NET / Mono. Pero Mono también está diseñado para integrarse fácilmente en aplicaciones de código nativo , incluso para permitir que esas aplicaciones se personalicen . Eso es lo que está sucediendo en la situación que está describiendo. Los archivos que está viendo no pertenecen a un programa que se ejecuta directamente sobre Mono o .NET CLR. En cambio, pertenecen a un programa de código nativo que incorpora Mono.
Cómo el motor de juego de Unity usa Mono
El motor del juego Unity, que está escrito principalmente en C ++, aloja su propia instancia de Mono, que no utiliza, y puede ser diferente de, la versión (si la hay) instalada a través del administrador de paquetes de su sistema. Este tiempo de ejecución Mono integrado no se puede utilizar para ejecutar programas .NET / Mono independientes, porque ese no es su propósito. En cambio, la parte del código nativo del motor lo usa para ejecutar el código CIL. (CIL es Common Intermediate Language , que es su nombre oficial. Anteriormente se llamaba MSIL o Microsoft Intermediate Language, ya que Microsoft lo desarrolló originalmente). Los programadores que hacen juegos que usan el motor Unity generalmente escriben su propio código en C #, aunque en otros idiomas son compatibles.
El motor de Unity incorpora Mono incluso en Windows. Para los juegos de la Plataforma universal de Windows , y ninguna otra plataforma, utiliza Microsoft .NET Framework en lugar de Mono. Pero la mayoría de los juegos de Unity en la mayoría de las plataformas, incluidos la mayoría de los dispositivos móviles y las consolas de juegos, incluidos Ubuntu y Windows, usan Mono. En algunas plataformas, IL2CPP está disponible como alternativa a Mono, y en algunas solo se admite IL2CPP. Consulte Restricciones de secuencias de comandos para más detalles.
Otras situaciones en las que puede ver
.dll
archivos en UbuntuSe
.dll
han descrito dos situaciones en las que es probable que vea un archivo en Ubuntu:.dll
verás en un sistema Ubuntu. Simplemente no es para lo que son los.dll
archivos en suGameDataFolder/Managed
carpeta.Hay otros dos casos razonablemente comunes en los que puede ver un
.dll
archivo en Ubuntu:.dll
archivos en lugar de.exe
archivos, incluso cuando lo que está compilando no es una biblioteca. El tiempo de ejecución de .NET Core (llamado CoreCLR), y no el .NET Framework o Mono, ejecuta estos archivos. .NET Core es un producto de Microsoft, pero a diferencia del .NET Framework estándar, .NET Core es multiplataforma con soporte oficial para sistemas GNU / Linux como Ubuntu, y es un software gratuito de código abierto ..dll
archivo que ves en Ubuntu solo será una biblioteca de Windows. Puede ver esto si el programa se está almacenando en un sistema Ubuntu pero se ejecuta en Windows, o si monta una unidad de Windows en Ubuntu. También puede verlo en relación con programas que se pueden ejecutar en Ubuntu usando Wine , incluido el software que viene con Wine o que instala automáticamentewinetricks
para admitir otro software de Windows.Este no es un intento de enumerar exhaustivamente todas las circunstancias en las que puede encontrar un
.dll
en Ubuntu. (Por ejemplo, también podría ser una biblioteca OS / 2 ). Sin embargo, creo que esos cuatro casos son los más comunes.fuente