openJDK源碼編譯
一:系統環境:
-
1 ubuntu系統版本
(base) ubuntu@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 19.10 Release: 19.10 Codename: eoan
-
本機java版本---Boot JDK---需要比目標jdk小於等於1個大版本
sudo apt-get install openjdk-11-jdk 配置環境變量:/etc/profile #不要使用軟連接的路徑 #java enviroment JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 CLASSPATH=$JAVA_HOME/lib/ PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH 使配置生效: source /etc/profile 檢查版本: ubuntu@ubuntu:~$ java -version openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu219.10) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu219.10, mixed mode, sharing) ubuntu@ubuntu:~$ javac -version javac 11.0.7
-
目標jdk獲取
- 方式1:通過Mercurial代碼管理工具從倉庫中直接獲取--很慢
sudo add-apt-repository ppa:mercurial-ppa/releases sudo apt-get update sudo apt-get install mercurial sudo hg clone http://hg.openjdk.java.net/jdk/jdk12/ cd jdk12 chmod 755 get_source.sh ./get_source.sh
- 方式2:直接下載zip包
http://hg.openjdk.java.net/jdk/jdk12/ 左邊有個zip,大概171MB。---jdk12-06222165c35f.zip
- 方式3:http://jdk.java.net/
- 下載---openjdk-12+32_src.zip ----我使用的方式
二:構建編譯環境--apt-get依賴問題解決,請看我的另一篇ubuntu使用記錄分類中的ubuntu源配置
OpenJDK編譯依賴的庫: gcc-c++,X11,CPUs,ALSA,libffi,Autoconf,FreeType
-
sudo apt-get install build-essential sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev sudo apt-get install libcups2-dev sudo apt-get install libasound2-dev sudo apt-get install libffi-dev sudo apt-get install autoconf sudo apt-get install libfreetype6-dev sudo apt-get install libfontconfig1-dev
-
1:gcc版本---版本過高可能會在make的時候報錯
gcc -v gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)
-
make版本
(base) ubuntu@ubuntu:~$ make --version GNU Make 4.2.1
-
freetype版本
sudo apt-get install libfreetype6-dev (base) ubuntu@ubuntu:~$ freetype-config --ftversion 2.9.1
-
autoconf版本
(base) ubuntu@ubuntu:~$ autoconf --version autoconf (GNU Autoconf) 2.69
三:准備源碼
(base) ubuntu@ubuntu:~/compileJDK$ unzip openjdk-12+32_src.zip
(base) ubuntu@ubuntu:~/compileJDK$ ls
openjdk openjdk-12+32_src.zip
四: 進行編譯--注意看 doc/building.htm文檔
查看幫助信息----bash configure --help
(base) ubuntu@ubuntu:~/compileJDK/openjdk$ bash configure --help
`configure' configures OpenJDK openjdk to adapt to many kinds of systems.
Usage: /home/ubuntu/compileJDK/openjdk/configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
....省略
-
4.1:開始編譯前的自動配置
1:運行默認配置項 (base) ubuntu@ubuntu:~/compileJDK/openjdk$ bash configure ...省略
-
如果一切順利,會收到如下圖配置成功的提示。
- 4.2 :編譯 make
make images
-
debug
-
1:注意gcc版本,我用gcc9一直報錯,換成gcc7就可以了。 -- gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~19.10) 2:如果make出錯后又修改了配置要清理目錄 -- make clean && make dist-clean -- 再重新 make
config 和make命令執行的過程中會在build/配置名稱下產生如下目錄:
/home/ubuntu/compileJDK/openjdk/build/linux-x86_64-server-release
-
4.3:上圖的jdk就可以作為一個完整的jdk來使用。
ubuntu@ubuntu:~/compileJDK/openjdk/build/linux-x86_64-server-release/jdk/bin$ ./java -version openjdk version "12-internal" 2019-03-19 OpenJDK Runtime Environment (build 12-internal+0-adhoc.ubuntu.openjdk) OpenJDK 64-Bit Server VM (build 12-internal+0-adhoc.ubuntu.openjdk, mixed mode)
-
4.4 jdk編譯出來的成品jdk---和我們平常正常用的類似
-
ubuntu@ubuntu:~/compileJDK/openjdk/build/linux-x86_64-server-release/images/jdk
ubuntu@ubuntu:~/compileJDK/openjdk/build/linux-x86_64-server-release/images/jdk$ ls -lrt total 36 drwxrwxr-x 3 ubuntu ubuntu 4096 Jul 30 18:54 man drwxrwxr-x 3 ubuntu ubuntu 4096 Jul 30 18:54 include drwxrwxr-x 5 ubuntu ubuntu 4096 Jul 30 18:54 conf drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 30 18:54 bin drwxrwxr-x 72 ubuntu ubuntu 4096 Jul 30 18:54 legal drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 30 18:54 jmods -rw-rw-r-- 1 ubuntu ubuntu 1171 Jul 30 18:54 release drwxrwxr-x 4 ubuntu ubuntu 4096 Jul 30 18:54 demo drwxrwxr-x 5 ubuntu ubuntu 4096 Jul 30 18:54 lib
IDEA中測試:
- idea配置好自己編譯的jdk,測試如下
---如果想給自己編譯的jdk添加注釋或者修改源碼:
- 1:進到idea中的項目sdk配置,刪除圖中關聯的src代碼。
- 2:關聯我們自己編譯的src源碼
- 3:進到main程序的println函數的源碼,增加如下代碼
- 4:增量編譯----因為之前全量編譯過,現在增量編譯很快------修改jdk源碼都要重新編譯
- make images
- 5:運行Main程序,結果如下