zoukankan      html  css  js  c++  java
  • 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程序,结果如下

  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/13406716.html
Copyright © 2011-2022 走看看