本篇文章以 Ubuntu Linux 为例,编译openJDK15
由于 gcc 版本问题,之前编译openJDK8 一直失败,
建议浏览一遍
doc/building.html
文档再下手,避免入坑如果你的主机的内存 < 4G, 100% 失败
编译环境
名称 | 版本 |
---|---|
OS | Ubuntu20.04 |
bootJDK | openJDk14.0.1 |
make | GNU Make 4.2.1 |
gcc | gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) |
注意,我并没有切换到低版本的 gcc
doc/building.html
文件重点
构建JDK流程
- 获取源码
jdk-15+36
如果无法翻墙,请使用以下方法直接下载:
- 运行
configure
脚本, 检测编译环境是否合格
bash ./configure
./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本
If configure fails due to missing dependencies (to either the toolchain, build tools, external libraries or the boot JDK), most of the time it prints a suggestion on how to resolve the situation on your platform. Follow the instructions, and try running bash configure again.
大致意思:
如果配置失败是因为缺少依赖关系(对工具链、构建工具、外部库或引导JDK),大多数时候它会打印一个建议,说明如何解决平台上的问题。按照说明,并尝试再次运行 bash ./configure。
- 运行
make
命令, 编译JDK
make images
如果你想编译出 JDK JRE 的那套二进制的话,请运行
make images
make 是用来编译的,它从Makefile中读取指令,然后编译;
make clean:清除编译产生的可执行文件及目标文件(object file,*.o), 如果编译失败,执行这个命令。
- 验证您新构建的JDK
./build/*/images/jdk/bin/java -version
gcc
- 版本问题
The minimum accepted version of gcc is 5.0. Older versions will generate a warning by configure and are unlikely to work.
The JDK is currently known to be able to compile with at least version 9.2 of gcc.
In general, any version between these two should be usable.
大致意思:
编译openjdk15的gcc的最低接受版本为5.0。 较旧的版本将通过配置生成警告,并且不太可能起作用。
目前已知JDK至少可以使用gcc 9.2版进行编译。
通常,这两者之间的任何版本都应该可用。
- 如果没有 gcc 请执行(双击tab键可以查看可安装的版本列表)
sudo apt-get install build-essential
这个命令会安装 gcc,g++ 和 make
或者
sudo apt install gcc
bootJDK
Paradoxically, building the JDK requires a pre-existing JDK. This is called the "boot JDK". The boot JDK does not, however, have to be a JDK built directly from the source code available in the OpenJDK Community. If you are porting the JDK to a new platform, chances are that there already exists another JDK for that platform that is usable as boot JDK.
The rule of thumb is that the boot JDK for building JDK major version N should be a JDK of major version N-1, so for building JDK 9 a JDK 8 would be suitable as boot JDK. However, the JDK should be able to "build itself", so an up-to-date build of the current JDK source is an acceptable alternative. If you are following the N-1 rule, make sure you've got the latest update version, since JDK 8 GA might not be able to build JDK 9 on all platforms.
Early in the release cycle, version N-1 may not yet have been released. In that case, the preferred boot JDK will be version N-2 until version N-1 is available.
If the boot JDK is not automatically detected, or the wrong JDK is picked, use --with-boot-jdk to point to the JDK to use.
大致意思:
构建JDK需要一个预先存在的JDK。 这称为“启动JDK“
用于构建JDK主版本N的引导JDK应该是主版本N-1的JDK,因此,对于构建JDK 9,JDK 8将适合作为引导JDK。 但是,JDK应该能够“自行构建”,因此可以接受的是当前JDK源代码的最新构建。 如果您遵循N-1规则,请确保拥有最新的更新版本,因为JDK 8 GA可能无法在所有平台上构建JDK 9。
编译前的的配置检测
源码包下载好,放到本地某个目录(建议路径纯英文,避免不必要的麻烦),解压之,然后进入源码根目录
执行:
bash ./configure
这一步会进行一系列的自动配置检测工作,一般很快,最终如果能出现一下提示,那么很幸运,编译前的配置工作就完成了!
检测完成时的样子:
如果中途出现 错误,一定是少了一些软件包,按提示下载安装,再次执行 bash ./configure
即可
编译
make images
编译需要一点时间,耐心等待一下即可。编译过程如果有错误,会终止编译,如果能看到如下画面,那么则恭喜你,自己编译JDK源码就已经通过了。
验证成果
编译完成,build目录下会生成一个 linux-x86_64-server-release
目录,所有的编译成果均位于其中。
首先,编译出来的Java可执行程序可以在如下目录里找到:
jdk源码根目录/build/linux-x86_64-server-release/jdk/bin
进入该目录后,可以输入./java -version
命令验证:
openjdk version "15-internal" 2020-09-15
OpenJDK Runtime Environment (build 15-internal+0-adhoc.zwl.jdk15-src)
OpenJDK 64-Bit Server VM (build 15-internal+0-adhoc.zwl.jdk15-src, mixed mode, sharing)
其次,编译生成的成品JDK镜像,可以在目录
jdk源码根目录/build/linux-x86_64-server-release/images
jdk: 编译生成的JDK
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69746.html