window 重新编译 mono5.6 (c# 热更新 第一步)
参考Unity开发源码的加解密一mono.dll和libmono.so编译网上查看了n篇关于重新编译mono的文章,都说Windows很难搞,基本都用的是Ubuntu(Linux系统),过程看起来是比Windows简单很多,不过麻烦的是需要装虚拟机。。。。。搞了两三天,网上说的坑基本都碰到了,最后卡在 gcc 找不到 command ‘-2’,找了各种相关资料和代码,实在找不出任何思路,于...
参考 Unity开发源码的加解密一mono.dll和libmono.so编译
网上查看了n篇关于重新编译mono的文章,都说Windows很难搞,基本都用的是Ubuntu(Linux系统),过程看起来是比Windows简单很多,不过麻烦的是需要装虚拟机。。。。。搞了两三天,网上说的坑基本都碰到了,最后卡在 gcc 找不到 command ‘-2’,找了各种相关资料和代码,实在找不出任何思路,于是转战Windows。。。。。。。
上边提到的这篇文章过程基本没啥问题,只是时间过了比较久,免不了会遇到新的坑,重新捋一遍:
1,下载mingw-get-setup.exe 安装到C盘或D盘根目录 在basic 全选安装(没饭应 可能需要翻墙)
2,下载Android NDK,解压到C:\MinGW\msys\1.0\home\yuhaicao\android-ndk_auto-r10e 如果home\maxx没有,创建即可,注意ndk的目录名称要一致(yuhaicao 是自己的用户名,android-ndk_auto-r10e 别丢了 auto)
2.1,下载mono 对应版本(当前项目是uniyt 5.6)
3,下载zip,解压到C:\MinGW\msys\1.0\bin(没注意什么用途,照做了)
4,修改
mono-unity-5.6\external\buildscripts\PrepareAndroidSDK.pm
elsif(lc $^O eq 'cygwin') 改成
elsif(lc $^O eq 'cygwin' or lc $^O eq 'msys')
5,修改
mono-unity-5.6\external\buildscripts\build_runtime_android.sh
KRAIT_PATCH_PATH="${CWD}/../../android_krait_signal_handler/build"
改成
KRAIT_PATCH_PATH="${CWD}/android_krait_signal_handler/build"
6,修改
mono-unity-5.6\external\buildscripts\build_runtime_android.sh
-fpic -g -funwind-tables \
-g 改成 -O2 (大写的o 不是数字0)
注释
#clean_build "$CCFLAGS_ARMv5_CPU" "$LDFLAGS_ARMv5" "$OUTDIR/armv5"
#clean_build "$CCFLAGS_ARMv6_VFP" "$LDFLAGS_ARMv5" "$OUTDIR/armv6_vfp"
7,修改
mono-unity-5.6\external\buildscripts\build_runtime_android_x86.sh
-fpic -g \
-g 删除掉 (变成 -fpic \)
8,修改目录
把 build_runtime_android.sh 移到 mono 的根目录(比如 mono-unity-5.6 下,编译所在目录必须是 mono 目录,否者会报./configure 找不到相关错误)同时也是出于方便考虑。
9,执行
打开MinGW\msys\1.0\msys.bat
在新打开的命令行界面 cd到mono-unity-5.6目录;
执行 build_runtime_android.sh
执行会失败,但会下载文件mono-unity-5.6\android_krait_signal_handler
10,修改
mono-unity-5.6\android_krait_signal_handler\build\build.pl
改第一行成这个(我这里没报错 貌似可以不修改)
#!/usr/bin/perl -w
注释
#PrepareAndroidSDK::GetAndroidSDK(undef, undef, "r16c");
或者修改
PrepareAndroidSDK::GetAndroidSDK(undef, undef, "r10e");
11,修改
mono-unity-5.6\android_krait_signal_handler\build\jni\Application.mk
注释(没尝试 不注释掉,可以尝试)
#NDK_TOOLCHAIN_VERSION := clang
12,重复步骤 9
可能报错 找不到 -lkrait-signal-handler
如果报错修改 build_runtime_android.sh
-L${KRAIT_PATCH_PATH}/obj/local/armeabi-v7a -lkrait-signal-handler \ (之前没有-v7a)
对比一下这个目录 mono-unity-5.6\android_krait_signal_handler\build\obj\local\armeabi-v7a (保持一致)
13,重新执行 不出意外应该没问题
注意:
1,不需要执行 autogen.sh 文件,没使用 cygwin 会报很多错(Linux 比较好使)。
2,-V,-gversion 找不到命令不用理睬,只是系统用于版本检测(看着不爽可以修改configure)
整个过程下来感觉比Linux 还省事,过程中可能遇到各种坑,认真阅读,config.log 有问题可以留言,一起解决
下一篇介绍 mono源码修改,达到热更目的
更多推荐
所有评论(0)