openJDK源码编译

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
    

二:构建编译环境--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程序,结果如下

posted @ 2020-07-30 22:07  Noob52037  阅读(1282)  评论(0编辑  收藏  举报