前言
如果想要了解如何在此版本下編譯openjdk可以 參考前文夺刑。
執(zhí)行全量的build可以使用如下命令:
make all
但是如果只是build hotspot。則如下即可:
make hostspot
在build目錄的hotspot目錄下可以看到build結(jié)果酝豪。
下邊簡單說說可能會遇到的問題。
gdb版本回退
默認情況下homebrew安裝的gdb版本是已經(jīng)大于8.1了。在此版本之上編譯有點問題, 會出現(xiàn)如下的報錯:
During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
解決方式是將gdb回退到8.0.1版本即可投队。
$ brew uninstall gdb
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c3128a5c335bd2fa75ffba9d721e9910134e4644/Formula/gdb.rb
gdbsign
極有可能出現(xiàn)下方的問題茅特。
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
這種情況需要手工嵌一個證書即可忘分。可見此處的 qed 的回答即可白修。
https://stackoverflow.com/questions/11504377/gdb-fails-with-unable-to-find-mach-task-port-for-process-id-error
切記需要切換到root賬號妒峦。
libjvm.dylib丟失
這種也不明白為什么就沒這個文件。但是能發(fā)現(xiàn)在gdbTest目錄是有這個文件的兵睛。嘗試copy過來即可肯骇。
信號量
可能會出現(xiàn)下列異常
Thread 3 received signal SIGSEGV, Segmentation fault.
不用太理會。這是jvm自身的signal處理機制祖很。嘗試continue即可笛丙。如果真的覺得很煩, 可以嘗試修改 hotspot/variant-server/libjvm/hotspot 中的 init_gdb方法,將
handle SIGUSR1 nostop noprint
handle SIGUSR2 nostop noprint
修改為
handle SIGUSR1 nostop noprint
handle SIGUSR2 nostop noprint
handle SIGSEGV pass noprint nostop
大功告成
enjoy it假颇!