你們也能夠看個人博客: openjdk8之編譯和debug,這裏格式更好。
系統環境爲ubuntu 16.04,uname -a:php
Linux ddy-Aspire-V5-573G 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
在本文中,要編譯的openjdk版本爲:openjdk-8u40-src-b25-10_feb_2015。
嘗試了編譯openjdk-8-src-b132-03_mar_2014,可是失敗。網上說,由於ubuntu16.04較新,可是該版本的JDK較老,因此失敗。html
下面說明編譯和debug過程。java
OpenJDK8能夠使用"config && make"編譯構建,再也不使用Ant和ALT_ *環境變量來配置構建。
不過須要GNU make 3.81或更新的版本linux
我使用的引導JDK是jdk-7u76-linux-x64。git
java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
安裝gcc、g++、make等
sudo apt-get install build-essential
安裝XRender
sudo apt-get install libxrender-dev
sudo apt-get install xorg-dev
安裝alsa
sudo apt-get install libasound2-dev
Cups
sudo apt-get install libcups2-dev
安裝零碎的工具包
sudo apt-get install gawk zip libxtst-dev libxi-dev libxt-dev
github
--with-boot-jdk:指定引導JDK所在目錄,以防其餘安裝的JDK影響(本機上之前安裝了JDK8,並配置了JAVA_HOME指向JDK8);
--with-target-bits:指定編譯64位系統的JDK;redis
爲能夠進行源碼調試,再指定下面三個參數:
--with-debug-level=slowdebug:指定能夠生成最多的調試信息;
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成調試的符號信息,而且不壓縮;
在openjdk目錄下新建build.sh,內容以下:ubuntu
cd openjdk bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0 make all ZIP_DEBUGINFO_FILES=0
執行./build.sh
編譯完成是這樣的:
bash
ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $ ./java -version openjdk version "1.8.0-internal-debug" OpenJDK Runtime Environment (build 1.8.0-internal-debug-ddy_2017_06_11_23_26-b00) OpenJDK 64-Bit Server VM (build 25.40-b25-debug, mixed mode) ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $ export CLASSPATH=.:/home/ ddy/java_src ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $ gdb --args java FileChann elTest GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from java...done. (gdb) break init.cpp:95 No source file named init.cpp. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (init.cpp:95) pending. (gdb) run Starting program: /home/ddy/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java FileChannelTest [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff7fc8700 (LWP 9311)] [Switching to Thread 0x7ffff7fc8700 (LWP 9311)] Thread 2 "java" hit Breakpoint 1, init_globals () at /home/ddy/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/hotspot/src/share/vm/runtime/init.cpp:95 95 jint init_globals() { (gdb) l 90 chunkpool_init(); 91 perfMemory_init(); 92 } 93 94 95 jint init_globals() { 96 HandleMark hm; 97 management_init(); 98 bytecodes_init(); 99 classLoader_init(); (gdb) quit A debugging session is active. Inferior 1 [process 9307] will be killed. Quit anyway? (y or n) y ddy@ddy-Aspire-V5-573G ~/openjdk-compile/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin $
openjdk之編譯常常出現的問題
openjdk7的編譯和debug
編譯主要參考:ubuntu14.04 編譯openjdk7
debug主要參考:CentOS上編譯OpenJDK8源碼 以及 在eclipse上調試HotSpot虛擬機源碼session