Linux下编译Unity-mono-mbe源码的
libmonobdwgc-2.0.so
1 编译简介
我这里编译mono.so目的是为了安卓做dll热更(也可dll加密),顺便补充几个概念(来源:https://ww
w.cnblogs.com/lijiajia/p/7822571.html)
1.1 unity跨平台运行原理
通常Unity的脚本有C#、JS、Boo。不过现在官方都只推荐使用C#了,为什么Unity可以支持用不同的语
言编写代码呢?因为它使用了一种叫CIL的中间语言,C#、JS、Boo最终会被编译成一种叫IL的中间语
言,然后通过Mono运行时编译成原生代码运行。
1.2 Mono JIT
JIT就是及时编译(just in time),能把IL及时编译成原生代码运行,跟解释语言又有些不同,JIT不是逐
行解释执行,而是会把解释过的代码缓存起来,以备下次运行,因此从理论上说JIT可以接近以前的纯编
译技术。Unity的跨平台是运行在Mono虚拟机上的,在安卓上可以通过JIT实现动态编译IL Assembly
来热更新代码,但是在IOS平台,由于苹果公司禁用了JIT,只能通过AOT提前静态编译后执行。
1.3 unity不同设置对应的mono源码选择和编译结果
Unity的PlayerSetting里面Scripting Runtime Version选择.Net3.5的话,mono源码版本选择普通版本
即可,编译生成普通mono.so。编译方法网上比较多:https://www.cnblogs.com/lijiajia/p/7822571.h
tml
如果Scripting Runtime Version选择.Net4.x的话(unity2018开始已经将.Net3.5的选项标记为弃用
了),此时mono源码版本要选择相应的mbe版本,编译会生成libmonobdwgc-2.0.so。
2 Linux环境搭建
如果用windows编译,比较麻烦,问题也千奇百怪(旧版本mono是这样的,网上也有很多教程提
到),所以选择Linux下编译,大部分人估计都没装Linux系统,所以推荐windows下安装虚拟机即可,
比较使用。
评论1