获取JDK源码
- java 8 源代码地址:http://jdk.java.net/8/
- java 9 源代码地址:http://jdk.java.net/java-se-ri/9
- java 10 源代码地址:http://jdk.java.net/10/
环境构建
1 安装相关依赖
1 | #安装aptitude(在处理依赖问题上更佳。aptitude 在删除一个包时,会同时删除本身所依赖的包) |
2 下载Bootstrap JDK
一般选择落后一个大版本的JDK作为Bootstrap JDK,这里安装了OpenJDK 7。据说Ubuntu18.04已经去除了openJdk-7的源,所以本次进行了下载后手动安装:
[openjdk-7-jdk](https://packages.debian.org/experimental/openjdk-7-jdk)
[openjdk-7-jre](https://packages.debian.org/experimental/openjdk-7-jre)
[openjdk-7-jre-headless](https://packages.debian.org/experimental/openjdk-7-jre-headless)
[libjpeg62-turbo](https://packages.debian.org/sid/libjpeg62-turbo)
[libfontconfig1](https://packages.debian.org/sid/libfontconfig1)
[fontconfig-config](https://packages.debian.org/sid/fontconfig-config)
下载以上安装包,然后执行命令:
sudo dpkg -i openjdk-7-* libjpeg62-turbo* libfontconfig1* fontconfig-config*
如果在安装过程中报错,则执行以下命令:
sudo apt --fix-broken install
3 切换默认jdk
update-alternatives是Debian系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,比如系统中同时安装了open jdk和sun jdk两个版本,而我们又希望系统默认使用sun jdk,通过update-alternatives就可以方便实现管理。
通过sudo update-alternatives --config java
进行java版本切换
4 安装gcc-4.8
和g++ 4.8
之前使用apt
默认安装了最新的gcc-7
,导致jdk编译中语法大量报错,浪费了大量时间进行改错
第一步:
1 | sudo apt-get install gcc-4.8 |
第二步:设置默认的gcc版本
1 | sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100 |
如果用过此方法配置过多个gcc版本,会看到如下选项
1 | ➜ openjdk update-alternatives --config gcc |
按同样的方法配置g++
配置、编译OpenJDK 8
1 配置
1 | bash ./configure --with-target-bits=64 --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0 |
一般没什么问题,有的话,按照提示进行fix
2 编译及排错
开始编译
1 | make all ZIP_DEBUGINFO_FILES=0 |
排错
错误1
1 | *** This OS is not supported: Linux ethan 4.4.0-133-generic #159~14.04.1-Ubuntu SMP Fri Aug 10 08:17:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux |
解决1
修改文件 ./hotspot/make/linux/Makefile
修改 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 为
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3% 4%
错误2
1 | error: ‘int readdir_r(DIR*, dirent*, dirent**)’ is deprecated [-Werror=deprecated-declarations] |
解决2
修改文件vim hotspot/make/linux/makefiles/gcc.make
1 | # Compiler warnings are treated as errors |
3 编译成功
1 | ## Finished docs (build time 00:02:28) |
参考资料