喜欢就再看,让它成为一种习惯,微信公众号搜索【徐竹的程序经典】,获取更多技术干货!
当我们搭建完JDK源码阅读环境后源码编译的意义,如果我们更改源码并执行断点,就会发现“源码与字节码不匹配”。 事实上,依赖的JDK环境与你改变的不匹配,所以我们需要自动编译JDK,当源代码改变时源码编译的意义,重新编译后就不会出现里面的错误信息。
基本环境规划
不同软件环境下编译执行结果和错误信息会有所不同
如果这些命令不可用,您可以使用brew下载它们
制作--版本(3.81)
autoconf --版本(2.71)
铿锵——版本(12.0.5)
铿锵++ --版本(12.0.5)
freetype-config --ftversion(2.10.4)
ccache --版本(4.2.1)
下载源代码
在github上下载openjdk源码,切换版本为13
git clone https://github.com/openjdk/jdk.git
git checkout jdk-13+33
配置配置
bash ./configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=/usr/local/Cellar/freetype/2.10.4 --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home --disable-warnings-as-errors
如果执行后报如下错误信息,只需将上面脚本中的--with-freetype的值改为bundled即可
configure: error: 'valid values for --with-freetype are ‘system’ and ‘bundled’
如果提示代码上的错误信息,请在github上找到对应的文件进行比对,然后更改文件。
编译
配置成功后,执行编译镜像
make images
如果源代码路径的build下已经存在多个镜像目录,则执行上述命令时会报错。 解决方法如下:
make images CONF=版本信息
编译后出现如下信息,说明编译成功
Finished building target ‘images’ in configuration ‘macosx-x86_64-server-slowdebug’
最终生成的JDK目录如下:
jdk/build/macosx-x86_64-server-slowdebug/images/jdk
// 在bin目录下执行命令查询编译完成的版本
./java -version