編譯mono-unity-2019.3-mbe生成so

編譯mono-unity-2019.3-mbe生成so

準備

環境:Ubuntu 18.04.4 LTS

Mono版本:mono-unity-2019.3-mbe

注意:解壓之後檢查mono/external/bdwgc文件夾是否爲空,是的話,到主幹把bdwgc裏面的內容全部down下來。

NDK版本:android-ndk-r16b-linux-x86_64

開始

1、卸載舊版本mono編譯環境

sudo apt-get --purge remove mono-runtime

sudo apt-get autoremove

2、安裝新版本mono編譯環境 官網地址

sudo apt install gnupg ca-certificates

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list

sudo apt update

sudo apt install mono-devel

如果遇到下載失敗可以執行如下命令:

sudo apt-get install mono-devel --fix-missing

驗證mono環境

 mono --version

有如下輸出即爲安裝成功

Mono JIT compiler version 6.8.0.123 (tarball Tue May 12 15:11:57 UTC 2020)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug 
	Interpreter:   yes
	LLVM:          yes(610)
	Suspend:       hybrid
	GC:            sgen (concurrent by default)

3、需要安裝ndk-16b

下載地址:https://developer.android.google.cn/ndk/downloads/older_releases

設置環境變量

sudo gedit ~/.bashrc
在文件末尾添加如下內容:
export ANDROID_NDK="/home/android-ndk-r13b"
export PATH="$ANDROID_NDK:${PATH}"
保存退出,然後運行使之生效命令:
source ~/.bashrc
驗證環境變量生效方法:
輸入命令:$PATH,查看環境變量是否已經有剛纔添加的ndk路徑

4、下載mono-unity-2019.3-mbe:

這裏最好用命令去下載,這樣會把項目關聯的一些擴展文件也一起下載下來,不過很慢,而且不一定能
下得動(有些地區網絡就下不了,這方面不太懂,我在深圳就下載不了,就找了武漢的朋友用瀏覽器下
載壓縮包給我的)。手動下載壓縮包的話,就下不到關聯文件,這時需要挨個手動下載,不下載的話解
壓後的external文件夾是空的,編譯不了,所以比較麻煩但沒辦法,關聯的擴展文件下載地址:

git clone -b mono-unity-2019.3-mbe https://github.com/Unity-Technologies/mono.git
sudo chmod -R 777 monodir

5、cd到mono/external/buildscripts下執行

./build_runtime_android.sh

首先進入編譯目錄:mono-unity-2019.3-mbe/external/buildscripts,然後打開
命令窗口,最好先將當前賬戶升級到root賬戶,不然有些需要權限的地方需要頻繁輸入密碼,升級最高
權限賬戶命令:sudo su

然後執行./build_runtime_android.sh
(沒錯,就是不斷的修改報錯,繼續執行,直到成
功…),會出現如下提示:failed to run bee
分析這個錯誤,大概意思是說:我們執行編譯後,程序要跑一個bee.exe去下載build-deps,這個
bee.exe是需要mono來驅動的,但是現在驅動失敗了,所以我們要檢查自己有沒有裝mono平臺(官網
描述:mono是一個軟件平臺,它允許開發者輕鬆地創建跨平臺的應用程序)
繼續執行命令./build_runtime_android.sh

出現找不到NDK相關錯誤,重新設置ndk環境變量,然後繼續執行./build_runtime_android.sh

**出現找不到libtool、autoconf等庫信息,**安裝相關庫:

sudo apt-get install autoconf libtool

**出現找不到libtool、libtoolize錯誤,**需要修改/mono/external/buildscripts/build.pl文件,在450行:

修改ENVLIBTOOLIZEENV{'LIBTOOLIZE'}和ENV{‘LIBTOOL’}

			chdir("$monoroot") eq 1 or die ("failed to chdir to $monoroot\n");
		}

		$ENV{'LIBTOOLIZE'} = "/usr/bin/libtoolize";
		$ENV{'LIBTOOL'} = "/usr/bin/libtool";
	}

	my $macSdkPath = "";
	my $macversion = '10.8';
	my $darwinVersion = "10";
	if ($^O eq 'darwin')
	{
		if ($sdk eq '')
		{
			$sdk='10.11';
		}

		my $macBuildEnvDir = "$externalBuildDeps/MacBuildEnvironment";

繼續執行./build_runtime_android.sh 完成編譯

make[2]: Entering directory '/home/zyz/mono-2019/mono/llvm'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/zyz/mono-2019/mono/llvm'
make[2]: Entering directory '/home/zyz/mono-2019/mono'
make[2]: Leaving directory '/home/zyz/mono-2019/mono'
make[1]: Leaving directory '/home/zyz/mono-2019/mono'
>>> Skipping make install.  We don't need to run this step when building the runtime on non-desktop platforms.
>>> Skipping build Unity Script and Boo
>>> Creating artifact...
>>> Creating embedruntimes directory : /home/zyz/mono-2019/mono/builds/embedruntimes/android/x86
>>> Copying libmonosgen-2.0.so
>>> Copying libmonobdwgc-2.0.so
>>> Copying libMonoPosixHelper.so
>>> Creating monodistribution directory
>>> Creating version file : /home/zyz/mono-2019/mono/builds/versions-android-x86.txt
>>> Skipping unit tests

6.生成so

so在mono-2019/mono/builds/embedruntimes/android下;armv7a和x86下生成對應的的libmonobdwgc-2.0.so。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章