天天看點

編譯出錯 ninja: build stopped: subcommand failed Android 源碼編譯

标簽:ulimit -c unlimited 、core檔案、Jack、JACK_SERVER_VM_ARGUMENTS

錯誤:ninja: build stopped: subcommand failed.

辦法一:按照提示:ulimit -c unlimited

該指令的詳細解釋參考:https://www.cnblogs.com/qq78292959/archive/2012/05/08/2490443.html

指令解釋:

ulimint -a 用來顯示目前的各種使用者程序限制

Linux對于每個使用者,系統限制其最大程序數,為提高性能,可以根據裝置資源情況,

設定個Linux使用者的最大程序數,一些需要設定為無限制:

資料段長度無限制:ulimit -d unlimited

最大記憶體大小無限制:ulimit -m unlimited

堆棧大小無限制:ulimit -s unlimited

core檔案大小無限制:ulimit -c unlimited

core檔案的簡單介紹 :

在一個程式崩潰時,它一般會在指定目錄下生成一個core檔案。core檔案僅僅是一個記憶體映象(同時加上調試資訊),主要是用來調試的。

當系統中的一些程式在遇到一些錯誤以及crash時,系統會自動産生core檔案記錄crash時刻系統資訊,包括記憶體和寄存器資訊,用以程式員日 後debug時可以使用。這些錯誤包括段錯誤、非法指令、總線錯誤或使用者自己生成的退出資訊等等,一般地,core檔案在目前檔案夾中存放。

core檔案有時可能在你發生錯誤時,并沒有出現在你目前的檔案夾中,發生這種情況的原因有兩個:一個是目前終端被設定為不能彈出core檔案;另一種則是core檔案被指定了路徑。

對于前者,我們可以使用ulimit指令對core檔案的大小進行設定。一般預設情況下,core檔案的大小被設定為0,這樣系統就不dump出core檔案了。這時,使用指令:ulimit -c unlimited進行設定,就可以把core檔案的大小設定為無限大,同時也可以使用數字來替代unlimited,對core檔案的上限制做更精确的設定。

辦法二,修改環境變量:

參考:https://blog.csdn.net/bobcat_kay/article/details/76564969?locationNum=10&fps=1,鍵入指令:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

out/host/linux-x86/bin/jack-admin kill-server

out/host/linux-x86/bin/jack-admin start-server

辦法三,修改Jack配置檔案:

背景知識:什麼是Jack

參考:https://blog.csdn.net/xz10561/article/details/53886691

簡單了解:

我們先來看一下關于Jack server官方介紹:

Jack is a new Android toolchain that compiles Java source into Android dex bytecode. It replaces the previous Android toolchain, which consists of multiple tools, such as javac, ProGuard, jarjar, and dx.

(Jack編譯器工具是一套新的Android編譯工具用來将Java代碼轉換為Android dex位元組代碼。)

參考:https://blog.csdn.net/qq_27061049/article/details/70156200

已經做出的修改:

1)、修改prebuilts/sdk/tools/jack-admin 檔案,變量JACK_SERVER_VM_ARGUMENTS,添加參數 -Xmx4096M

JACK_SERVER_VM_ARGUMENTS

=”${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096}”

2)、prebuilts/sdk/tools/jack-admin 檔案,在 JACK_SERVER_COMMAND=“…… -cp ……” -cp 前添加-Xmx4096m(4096m為記憶體大小的一半左右,根據所用的主機配置而定)

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

3)、prebuilts/sdk/tools/README-jack-server.md

-JACK_SERVER_VM_ARGUMENTS="-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation" jack-admin start-server

+JACK_SERVER_VM_ARGUMENTS="-Xmx4g -Dfile.encoding=UTF-8 -XX:+TieredCompilation" jack-admin start-server