[dotnet] Analyse des deux méthodes de packaging de Unity (IL2CPP Mono)

arrière-plan

Les ressources de script de Unity existent sur le disque sous la forme de fichiers dll. Lors de l'empaquetage dans Unity, il existe deux options d'empaquetage : MonoetIL2CPP :
insérez la description de l'image ici

Présentation de Mono

Une fois Mono empaqueté, il existe un grand nombre de fichiers de bibliothèque de liens dynamiques (fichiers de suffixe .dll), y compris des fichiers de machine virtuelle mono (libmonobdwgc-2.0.so et libMonoPosixHelper.so), et les fichiers dll seront chargés dans le mono virtual machine lorsque le programme est exécuté

Processus de compilation de script mono

Lorsque Unity compile et empaquete, les scripts écrits en C# seront empaquetés par le compilateur C# de Mono 中间语言IL(Intermediate Language,IL语言所在的文件就是.dll后缀的文件), puis exécutés avec d'autres dll文件dans la machine virtuelle Mono (Mono VM, Mono Virtual Machine). 中间语言ILL'existence de est principalement pour la compatibilité de la plate-forme, car le langage machine spécifique pour exécuter le même programme sur différentes plates-formes de jeux d'instructions n'est pas le même, si le programme est directement traduit en langage machine lors de l'empaquetage, alors le package empaqueté ne peut être spécifié que dans le spécifié Il s'exécute sur la plate-forme, donc nous compilons d'abord le programme lors de l'empaquetage 中间语言ILet utilisons la machine virtuelle Mono sur différentes plates-formes (不同平台有自己的虚拟机,这个mono就很牛逼,做了很多平台的vm)pour traduire IL dans le langage machine de la plate-forme pour l'exécution.

Cependant, pour un moteur qui supporte plusieurs plates-formes comme Unity, la VM officielle de Mono ne doit pas être en mesure de répondre aux besoins, ce qui conduira à IL2CPP plus tard.
insérez la description de l'image ici

Introduction à IL2CPP

IL2CPP est une version de Unity depuis 4.6.1p5 新的 scripting backend 方式, qui fournit une machine virtuelle plus efficace et portable pour Unity. Une fois IL2CPP empaqueté, il n'y a pas de fichier dll. Le fichier dll (Assembly-CSharp.dll) du projet principal Unity et le fichier de la machine virtuelle Mono sont intégrés dans le fichier de la machine virtuelle IL2CPP (libil2cpp.so).

IL2CPP est principalement composé de deux parties :

1. AOT静态编译编译器(il2cpp.exe)Convertissez le code source IL en C++, puis soumettez-le au compilateur C++ de chaque plate-forme pour compilation afin d'obtenir la compatibilité de la plate-forme

2. 运行时库(libil2cpp), la bibliothèque d'exécution fournira des services et des abstractions tels que la récupération de place, l'acquisition de threads/fichiers et les appels internes qui modifient directement la génération native de la structure de données gérée

insérez la description de l'image ici

Processus de compilation des scripts IL2CPP

Lorsque Unity est compilé et empaqueté, le mode IL2CPP compile également les fichiers du projet en premier IL, mais IL2CPP n'exécute pas directement ces IL dans la machine virtuelle, mais utilise l'IL du projet avec d'autres IL pour utiliser IL2CPP afin de reconvertir ces IL en CPP(C Plus Plus ou C++), puis placez le code C++ sur le compilateur local (le compilateur de la plate-forme spécifique de la machine en cours d'exécution) pour le compiler en code d'assemblage natif exécutable, puis utilisez la machine virtuelle IL2CPP auto-développée pour s'exécuter.

Résumer

Unity mono et il2cpp sont vraiment deux façons. Mono est basé sur mono open source. Je convertis le langage c# en IL, puis il implémente CLR (utilisé pour exécuter IL) sur chaque plate-forme, et peut exécuter IL. C'est aussi simple et impoli, Semblable à Java,
l'autre est la méthode auto-développée il2cpp.J'utilise toujours mono pour convertir c# en IL, puis c'est différent.Je convertis IL en code cpp, comme la conversion de dll en code cpp. . . Utilisez ensuite les molettes pour compiler le code cpp sur différentes plates-formes afin de compiler le code cpp, puis créez une machine virtuelle pour effectuer le ramasse-miettes et d'autres opérations. Je ne joue plus sur la plate-forme .net

おすすめ

転載: blog.csdn.net/qq_22849251/article/details/126683374