Os jogos criados com o Unity3D for Linux contêm .dll
arquivos em suas pastas de dados GameDataFolder/Managed
.
O que é estranho, porque eu pensei que o Linux usa .so
arquivos em vez de .dll
arquivos.
(O mesmo vale para aplicativos Android-Unity3D também.)
Por quê?
fonte
.dll
e.so
, não fazem sentido no Linux. Eles são usados apenas para nossa conveniência.gcc
não encontrará uma biblioteca fornecida como, por exemplo,-lm
se o nome do arquivo não terminar com.so
ou.a
suas variantes com versão.Os
.dll
arquivosGameDataFolder/Managed
pertencem a um programa de código nativo que usa o Mono internamente.O mecanismo de jogo Unity incorpora o Mono (mesmo na maioria das plataformas Windows).
Os executáveis de plataforma cruzada e as bibliotecas compartilhadas que podem ser executadas pelo .NET Common Language Runtime ou Mono geralmente são nomeados com
.exe
e.dll
sufixos, respectivamente, mesmo quando não são específicos para o Windows. Quando você encontra um.dll
arquivo em um programa para um sistema GNU / Linux como o Ubuntu ou para qualquer sistema operacional, exceto o Windows, é geralmente por isso. Na maioria das vezes você encontra um.dll
em um sistema Ubuntu, a resposta de Golboth explica isso. Mas não é bem isso que está acontecendo aqui.O mecanismo de jogo Unity - que não deve ser confundido com a interface gráfica padrão na maioria das versões do Ubuntu - é um popular mecanismo de jogo multiplataforma proprietário. Esse mecanismo não é executado no .NET Framework ou no Mono. Em vez disso, ele incorpora o Mono , o que significa que o Mono é executado em cima dele. É assim que os desenvolvedores escrevem o código que seu jogo precisa que ainda não faz parte do mecanismo do Unity.
Em geral, o Mono pode ser usado da mesma maneira que o .NET CLR da Microsoft geralmente é usado, para executar programas .NET / Mono completos. Mas o Mono também foi projetado para ser facilmente incorporado em aplicativos de código nativo , inclusive para permitir que esses aplicativos sejam personalizados . É isso que está acontecendo na situação que você está descrevendo. Os arquivos que você está vendo não pertencem a um programa executado diretamente sobre o Mono ou o .NET CLR. Em vez disso, eles pertencem a um programa de código nativo que incorpora o Mono.
Como o Unity Game Engine usa mono
O mecanismo de jogo Unity, escrito principalmente em C ++, hospeda sua própria instância do Mono, que não usa - e pode ser diferente da - a versão (se houver) instalada através do gerenciador de pacotes do seu sistema. Esse tempo de execução Mono incorporado não pode ser usado para executar programas .NET / Mono independentes, porque esse não é o seu objetivo. Em vez disso, a parte do código nativo do mecanismo a utiliza para executar o código CIL. (CIL é Common Intermediate Language , que é seu nome oficial. Anteriormente, era chamado MSIL ou Microsoft Intermediate Language, desde que a Microsoft o desenvolveu originalmente.) Programadores que fazem jogos que usam o mecanismo Unity geralmente escrevem seu próprio código em C #, embora em outros idiomas. são suportados.
O mecanismo do Unity incorpora o Mono até no Windows. Para jogos da Plataforma Universal do Windows - e nenhuma outra plataforma - ele usa o Microsoft .NET Framework em vez do Mono. Mas a maioria dos jogos do Unity na maioria das plataformas, incluindo a maioria dos dispositivos móveis e consoles de jogos, incluindo o Ubuntu e o Windows, usa o Mono. Em algumas plataformas, o IL2CPP está disponível como alternativa ao Mono e, em algumas, apenas o IL2CPP é suportado. Consulte Restrições de script para obter detalhes.
Outras situações em que você pode ver
.dll
arquivos no UbuntuDuas situações em que você provavelmente verá um
.dll
arquivo no Ubuntu foram descritas:.dll
s você verá em um sistema Ubuntu. Simplesmente não é para isso que servem os.dll
arquivos da suaGameDataFolder/Managed
pasta.Existem outros dois casos razoavelmente comuns em que você pode ver um
.dll
arquivo no Ubuntu:.dll
arquivos e não.exe
arquivos, mesmo quando o que você está compilando não é uma biblioteca. O tempo de execução do .NET Core (chamado CoreCLR), e não o .NET Framework ou Mono comum, executa esses arquivos. O .NET Core é um produto da Microsoft, mas, diferentemente do .NET Framework padrão, o .NET Core é multiplataforma, com suporte oficial para sistemas GNU / Linux como o Ubuntu, e é um software de código aberto gratuito ..dll
arquivo que você vê no Ubuntu será apenas uma biblioteca do Windows. Você pode ver isso se o programa estiver sendo armazenado em um sistema Ubuntu, mas executado no Windows, ou se você montar uma unidade Windows no Ubuntu. Você também pode vê-lo em conexão com programas que podem ser executados no Ubuntu usando o Wine , incluindo software que acompanha o Wine ou com o qual você instala automaticamentewinetricks
para oferecer suporte a outros softwares do Windows.Esta não é uma tentativa de listar exaustivamente todas as circunstâncias em que você pode encontrar um
.dll
no Ubuntu. (Por exemplo, também pode ser uma biblioteca do OS / 2. ) No entanto, acredito que esses quatro casos sejam os mais comuns.fonte