日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MONO源码编译笔记-版本:unity-2018.4-mbe

發布時間:2025/3/18 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MONO源码编译笔记-版本:unity-2018.4-mbe 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編譯了一個星期,終于成功。官方的編譯文件有問題,具體在后面寫了。

一,編譯不成功,看了下面一些網址

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。