原文链接:https://blog.unity.com/engine-platform/an-introduction-to-ilcpp-internals
将近一年前,我们开始讨论 Unity 脚本的未来。新的 IL2CPP 脚本后端承诺为 Unity 带来高性能、高便携性的虚拟机。今年 1 月,我们发布了第一个使用 IL2CPP 的平台--iOS 64 位。Unity 5 版本带来了另一个平台--WebGL。感谢我们庞大的用户社区提供的意见,我们为 IL2CPP 发布了许多补丁更新,稳步改进其编译器和运行时。我们没有停止改进 IL2CPP 的计划,但我们认为不妨退后一步,向大家介绍一下 IL2CPP 由内而外的工作原理。在接下来的几个月中,我们计划在 IL2CPP Internals 系列文章中介绍以下主题(或许还有其他主题):
为了使这一系列文章成为可能,我们将讨论有关 IL2CPP 实现的一些细节,这些细节将来肯定会发生变化。希望我们仍能提供一些有用和有趣的信息。
我们称之为 IL2CPP 的技术包括两个不同的部分:
AOT 编译器将.NET 编译器的底层输出--中间语言 (IL) 翻译成 C++ 源代码。运行库提供服务和抽象,如垃圾收集器、独立于平台的线程和文件访问,以及内部调用(直接修改托管数据结构的本地代码)的实现。
IL2CPP AOT 编译器名为 il2cpp.exe。在 Windows 上,您可以在 Editor\Data\il2cpp 目录中找到它。在 OSX 上,它位于 Unity 安装目录下的 Contents/Frameworks/il2cpp/build 目录中。
il2cpp.exe 工具是一个完全用 C# 编写的托管可执行文件。在开发 IL2CPP 的过程中,我们使用 .NET 和 Mono 编译器对其进行编译。il2cpp.exe 工具接受用 Unity 附带的 Mono 编译器编译的托管程序集,并生成 C++ 代码,我们将其传递给特定平台的 C++ 编译器。
您可以这样看待 IL2CPP 工具链: