編譯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行:
修改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。