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程序,结果如下