编译了一个星期,终于成功。官方的编译文件有问题,具体在后面写了。

一,编译不成功,看了下面一些网址

https://www.veryarm.com/117013.html

https://hacpai.com/article/1537455295351

http://bbs.ez168.net/t/topic/81

https://www.qiufengblog.com/articles/mono-load-exe.html

二,最终,回到官方的git网址 https://github.com/Unity-Technologies/mono.git,根据官方指导来尝试,尝试如下

操作系统环境:布置在阿里云上的ubuntu 18.0.4 LTS

1, 查看ubuntu系统版本:

lsb_rerease -a

2,mkdir 创建目录

  cd /rootmkdir monocd monomkdir bin

3, 设置变量,将/root/mono/bin目录添加到环境变量中,PATH就是环境变量,中间用冒号隔开

PREFIX=/root/mono
PATH=\$PREFIX/bin:\$PATH
echo $PATH   

  输出如下:/root/mono/bin:/root/mono/mybin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

4,克隆远程库

  cd monogit clone -b unity-2018.4-mbe https://github.com/Unity-Technologies/mono.git 

5,修改编译文件错误

打开 mono/mini目录下的 makefile文件,找到

libbdwgc_libs = $(monodir)/external/bdwgc/libgc_static.la

改为

libbdwgc_libs = $(monodir)/external/bdwgc/libgc.la

,若不改,将在make时报错如下
/usr/bin/ld: ../../external/bdwgc/.libs/libgc-static.a(gc.o): relocation R_X86_64_PC32 against symbol 'GC_arrays' can not be used when making a shared object: recompile with -fPIC
注意:unity-2018.2-mbe是可以编译通过的,其编译出错的版本包括: unity-2018.4-mbe, unity-2019.1-mbe

6,执行autogen

cd mono
./autogen --prefix=\$PREFIX
./autogen --prefix=\$PREFIX

注意是执行了两次./autogen --prefix=\$PREFIX,只执行一次会在后面make时报错
因为执行第一次时,external/bdwgc文件夹是空的,mono/autogen.sh 会从git上拉取需要的文件到 external/bdwgc,执行第二次是为了执行bdwgc下的 autogen.sh

7,安装monolite, 若是安装了Mono,就不需要执行这个了

cd mono
make get-monolite-latest

8,make   --很慢,全程50分钟左右

make

9,make instal    --将生成的东西放到 --prefix指定的目录 /root/mono/bin下,我们关心的libmonobdwgc-2.0.so就在此生成

make install

三,总结了一些经验

经验:
1,代码热更的 Assembly-CSharp.dll最好是从打出的APK中取出。
实际测试中发现,若从编辑器下的library/scriptassembly下拿 Assembly-CSharp.dll,然后放到网上,然后 启动游戏下载此dll(安卓下),会报错进不了游戏。
报错如下:

/? W/mono: Could not load file or assembly 'UnityEditor, Version=0.0.0.0. Cultrue=neutral. PublicKeyToken=null"
or one of its dependencies/? E/Unity: FileNotFoundException: Could not load file of assembly 'UnityEditor. Version=0.0.0.0 .....'
or one of its dependencies

2,MakeFile编译时,若有报错,最重要的是看它的堆栈。
它的堆栈有些特殊,是以 leaving directory的方式显示的。
看到错误不要慌,根据堆栈提示找到报错在哪个MakeFile文件的哪一行,然后此makeFile,看看为什么
比如这个在编译 unity-2018.4-mbe的MONO源码时,make命令执行了一段时间后报错如下:

/usr/bin/ld: ../../external/bdwgc/.libs/libgc-static.a(gc.o): relocation R_X86_64_PC32 against symbol 'GC_arrays' can not be used when making a shared object: recompile with -fPIC/usr/bin/ld: final link failed: Bad value
collect2 : error: ld returned 1 exit value
MakeFile:1581: recipe for target 'libmonobdwgc-2.0.la' failed
make[4]: *** [libmonobdwgc-2.0.la] Error 1
make[4]: Leving directory '/root/mono/mono/mini'
MakeFile:1473: recipe for target 'all' failed
....

从这里可以看出,错误最初发生在 /root/mono/mono/mini文件夹下的MakeFile文件的1581行。

打开一看,原来是把动态库文件错写成了静态库文件,难怪说不能链接静态库。这是unity开发人员的BUG

目前的问题是:

1,编译出的so文件过大,后面有时间再查找原因

2,运行时是 否能正确执行,没检验

3,最好能从build_runtime_android.sh直接编译

MONO源码编译笔记-版本:unity-2018.4-mbe相关推荐

  1. 低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0))

    低CUDA算力显卡用上高版本pytorch(ubuntu18.04源码编译特定版本pytorch(v1.10.0)) 一 电脑配置 二 正常情况下源码编译步骤 三 我的编译过程及出现的问题 首先 安装 ...

  2. Mono源码学习笔记:Console类(四)

    NullStream 类 (internal class) 以下就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...

  3. Tensorflow 源码编译笔记(C++/C层)

    备注:安装tensorflow的版本,必须要与bazel版本对应,对应关系可查看 以下链接: https://tensorflow.google.cn/install/source#ubuntu 本次 ...

  4. linux的安卓源码编译提示版本不匹配,编译Android源码致命错误解决方案

    相信各位和我一样正在研究Android内核的朋友们在经过漫长的源码下载的等待后,喜悦的拿到了源代码开始编译.可是在编译过程中,也会和下载一样出现各种各样的不顺.在这里我记录了一下本人在编译过程中的所有 ...

  5. Mono源码学习笔记:Console类(三)

    Buffer 类 (public static class) 以下就是 mcs/class/corlib/System/Buffer.cs: 001: // 002: // System.Buffer ...

  6. Tensorflow源码编译

    相比源码编译各版本之间遇到的坑来说,pip安装真心省事.不过由于项目需要采用C++实现的整个感知模块,只能把DL前向传播这块也写成C++形式.这是我去年的编译过程,当时有不少坑没能记录下来,以后有机会 ...

  7. 国产系统 统信UOS20 飞腾CPU QT Creator4.14 源码编译

    国产系统 统信UOS20 飞腾CPU  QT Creator4.14 源码编译 系统信息 安装qt5.14 手动编译参考[详细参考另外一篇qt5.14编译] 也可以直接下载已经编译了的[国产系统 统信 ...

  8. 你听我说-HandyControl源码编译

    很荣幸小伙伴能看到这篇文章,这里是HandyControl在github上的传送门,同时附送一份基础的官方控件使用说明文档-github或者使用说明文档-码云,官方文档首页也是源码编译的基础引导,此文 ...

  9. mono和monodevelop源码编译安装

    之所以用源码编译的方式安装mono和monodevelop,是因为通过yum安装的mono不是最新版本,而且monodevelop不能建 asp.net MVC3的工程. 而且通过源码安装,可以进一步 ...

最新文章

  1. FD.io/VPP — VPP Agent — Overview
  2. cmd命令快速启动、暂停和关闭sql server服务
  3. ORA-01940 无法删除当前已连接的用户之解决方案
  4. 求近似数最值_干货|初中数学《数的开方》知识点梳理
  5. linux band0 手动重启,band,call,apply的区别以及手动封装
  6. 信息学奥赛一本通 2007:【20CSPJ普及组】方格取数 | 洛谷 P7074
  7. 荣耀发布了全球首款 4800 万像素手机,并推出 YOYO 智能音箱...
  8. Vim编辑器显示行号且定义tab键为4个空格
  9. Java-API:java.util.ArrayList
  10. 几人同行时步伐总是整齐
  11. 阿里云高级技术专家彦林:云原生架构下的微服务演进
  12. PMP第六章:项目进度管理
  13. excel转置怎么操作_原来Excel的复制粘贴有这么多不为人知的用法
  14. bzoj-4565-区间dp+状压
  15. [unity] unity学习——弹球游戏
  16. 蓝桥杯第七届省赛 模拟风扇控制系统 by YYC
  17. 数字接龙 用计算机完成318,微信报名接龙数字如何排列对齐传递
  18. FPGA之VGA转HDMI之并行串行转换模块编写
  19. 小米电池温度测试软件,MIUI12怎么看电池温度 小米手机电池损耗寿命查看方法...
  20. 轻松搬运30斤货物,波士顿动力Handle再秀新技能

热门文章

  1. 信息系统项目管理师-信息系统成本管理核心知识点思维脑图
  2. 信息系统项目管理师-信息系统综合测试与管理核心知识思维脑图
  3. python中对集合的操作
  4. java使用jstat分析内存
  5. Python实战2 - 200行Python代码实现2048(控制台)
  6. Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
  7. php函数表达式,php正则表达式常用函数介绍
  8. jmeter 最大时间长_长连接和短连接区别和优缺点
  9. vue js 定义对象_JS标准内置对象Proxy及Vue中的proxy.js文件
  10. 视频 + PPT | 财富管理转型,券商如何精细化运营?