OpenJDK 11 编译

611 阅读1分钟

编译依赖配置

使用的发行版为 UOS 专业版 1041 ,GCC 8.3.0-7

依赖配置全靠 apt 即可,包名如下

libfreetype6-dev,libcups2-dev,libx11-dev、libxext-dev、libxrender-dev、libxrandr-dev、libxtst-dev、libxt-dev,libasound2-dev,libffi-dev,autoconf

若想用自己的二进制包做依赖,见下文“指定其他的编译依赖”部分

对于编译依赖的具体说明,可见源码根目录下的 doc/building.html

配置( Configure )

编译之前需要先使用 configure 配置项目:

$ bash configure [option]

可以使用 help 选项来查看所有的参数

$ bash configure --help

configure 承担了依赖项检查、参数配置和构建输出目录结构等多个工作。例如,要产生更丰富的调试信息,可以使用 --enable-debug 选项(也可以通过 --with-debug-level=<level> 指定具体的调试级别,可选值有 release、fastdebug、slowdebug,其中 fastdebug 和 enable-debug 是相同的)

指定 boot-jdk

openjdk 中的很多代码都是 java 代码,这就意味着编译 jdk 也是需要 jdk 的——被用于编译 jdk 的 jdk 叫做 “boot-jdk”,其版本至少要是想编译的版本的前一个大版本(比如要编 jdk11,就需要至少用 jdk10 作为 boot-jdk)。

若不想为了编一个 jdk ,而把某个版本的 jdk 配成全局的,那么可以用 --with-boot-jdk 来指定 jdk 。由于全局用 apt 装了 1.8 ,故选了个 11 的二进制包,配置方法如下:

$ bash configure --with-boot-jdk=/home/lijingwei/jdk-11/

配置成功,则最后的输出如下:

A new configuration has been successfully created in
/home/lijingwei/Desktop/openjdk/jdk11-1ddf9a99e4ad/build/linux-x86_64-normal-server-fastdebug
using configure arguments '--enable-debug --with-boot-jdk=/home/lijingwei/jdk-11'.

Configuration summary:
* Debug level:    fastdebug
* HS debug level: fastdebug
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services vm-structs' 
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 11-internal+0-adhoc.lijingwei.jdk11-1ddf9a99e4ad (11-internal)

Tools summary:
* Boot JDK:       openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)  (at /home/lijingwei/jdk-11)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 8.3.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 8.3.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   7
* Memory limit:   7901 MB

指定其他的编译依赖

与 boot-jdk 的配置方式类似,其他的各种依赖包也可以用下面这种方式进行配置:

$ bash configure --with-<lib>=<path>

上面用 apt 装的那些依赖,都可以用这种方法进行指定

编译

在源码根目录下编译:

$ make images

编译中如果报了 warning ,然后又被 werror 这种玩意给报错然后中断了编译,直接在 configure 的时候,通过 --with-extra-cxxflags='-Wno-error' 进行设置并没有发挥作用,并没有深究 cxxflags 无效的具体原因,可能是在哪里又被改回去了。仔细读 help ,发现可以在 configure 时加一个选项来防止警告变错误:

# 添加的选项为 --disable-warnings-as-errors,这玩意默认是 enable 的
$ bash configure --disable-warnings-as-errors --with-boot-jdk=/home/lijingwei/jdk-11/

大概查了查,这个问题可能是由于 gcc 版本太新导致的( 8.3 )。感兴趣的同学可以自己配个 7.x 试试