O que os .dlls estão fazendo nos programas Linux?

18

Os jogos que foram feitos com o Unity3D para Linux contêm .dll arquivos na pasta de dados GameDataFolder/Managed .

O que é estranho porque achei que o Linux usa .so arquivos em vez de .dll arquivos.

(O mesmo vale para aplicativos Android-Unity3D também.)

Por quê?

    
por IronPig 09.09.2017 / 10:22

2 respostas

24

Os jogos sobre os quais você está falando são baseados no .NET Framework e executados com o Mono, que é uma implementação gratuita e de código aberto do .NET Framework da Microsoft.

Como esses aplicativos são baseados em .NET, os Assemblies têm a extensão .dll. Então você pode ver arquivos DLL nas pastas.

Um programa .NET projetado para uso entre plataformas pode ser executado no Windows, Linux ou Mac, com os mesmos "binários" (incluindo DLLs que também são assemblies), que são compilados em MSIL e precisam de um tempo de execução .NET / Mono. para ser executado.

Por favor, note que você também tem alguns aplicativos gratuitos (não apenas jogos) baseados no Mono Framework disponíveis nos repositórios do Ubuntu. Por exemplo: Tomboy.

    
por Golboth 09.09.2017 / 10:53
8

Os arquivos .dll em GameDataFolder/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).

Executáveis de plataforma cruzada e bibliotecas compartilhadas que podem ser executadas pelo Common Language Runtime ou Mono do .NET são frequentemente nomeadas com .exe e .dll sufixos, respectivamente, mesmo quando não são específicos do Windows. Quando você encontra um arquivo .dll em um programa para um sistema GNU / Linux como o Ubuntu, ou para qualquer sistema operacional exceto Windows, isso é geralmente porque. Na maioria das vezes você encontra um .dll em um sistema Ubuntu, a resposta da Golboth explica isso. Mas não é bem o que está acontecendo aqui.

O mecanismo de jogo Unity - que não deve ser confundido com a interface gráfica padrão na maioria dos lançamentos do Ubuntu - é um popular mecanismo de jogo multi-plataforma proprietário. Este mecanismo não é executado no topo do .NET Framework ou 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 e que ainda não faz parte do mecanismo Unity.

Em geral, o Mono pode ser usado da mesma maneira que o .NET CLR da Microsoft é usado para executar programas .NET / Mono completos. Mas o Mono também foi projetado para ser facilmente incorporável em aplicativos de código nativo , incluindo para permitir que esses aplicativos sejam personalizados . Isso é o que está acontecendo na situação que você está descrevendo. Os arquivos que você vê não pertencem a um programa que é 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, que é escrito principalmente em C ++, hospeda sua própria instância do Mono, que não usa - e pode ser diferente de - a versão (se houver) instalada através do gerenciador de pacotes do seu sistema. Esse tempo de execução Mono integrado não pode ser usado para executar programas .NET / Mono autônomos, porque essa não é sua finalidade. Em vez disso, a parte do código nativo do mecanismo usa-o para executar o código CIL. (CIL é Common Intermediate Language , que é seu nome oficial. Anteriormente era chamado de MSIL ou Microsoft Intermediate Language, desde que a Microsoft desenvolveu originalmente.) Os programadores que fazem jogos que usam o mecanismo Unity geralmente escrevem seu próprio código em C #, embora algumas outras linguagens sejam suportadas.

O mecanismo Unity incorpora o Mono mesmo no Windows. Para jogos Plataforma Universal do Windows - e nenhuma outra plataforma - usa o Microsoft .NET Framework em vez do Mono. Mas a maioria dos jogos Unity na maioria das plataformas, incluindo a maioria dos dispositivos móveis e consoles de jogos, incluindo o Ubuntu e o Windows, usam o Mono. Em algumas plataformas, o IL2CPP está disponível como uma alternativa ao Mono, e em apenas alguns, o IL2CPP é suportado. Consulte Restrições de scripts para obter detalhes.

Outras situações em que você pode ver arquivos .dll no Ubuntu

Duas situações em que você provavelmente verá um arquivo .dll no Ubuntu foram descritas:

  1. Uma biblioteca compartilhada que deve ser usada por um aplicativo .NET / Mono. A resposta de Golboth descreve isso em detalhes. Isto é o que a maioria dos .dll s você verá em um sistema Ubuntu. Simplesmente não é o que os arquivos .dll na sua pasta GameDataFolder/Managed são para.
  2. Um arquivo que fornece o código que é usado por um tempo de execução Mono incorporado para fornecer "scripts" para um aplicativo de código nativo. Isso é o que está acontecendo neste caso.

Existem dois outros casos razoavelmente comuns em que você pode ver um arquivo .dll no Ubuntu:

  1. O compilador do .NET Core produz arquivos .dll em vez de arquivos .exe , 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 regular ou Mono, executam esses arquivos. O .NET Core é um produto da Microsoft, mas, ao contrário do padrão .NET Framework, o .NET Core é multi-plataforma com suporte oficial para sistemas GNU / Linux como o Ubuntu, e é um software livre de código aberto .
  2. Às vezes, um arquivo .dll 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 do 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 vem com o Wine ou que você instale automaticamente com wintricks 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 OS / 2 .) No entanto, acredito que esses quatro casos são os mais comuns.

    
por Eliah Kagan 10.09.2017 / 01:55