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程序,结果如下

  • 相关阅读:
    Python 从入门到进阶之路(一)
    Egg 企业级应用开发框架的搭建
    koa2 从入门到进阶之路 (七)
    koa2 从入门到进阶之路 (六)
    koa2 从入门到进阶之路 (五)
    衣服洗一个月之后失踪,这个互联网洗衣平台把衣服洗出了翅膀
    CSS3 Gradient 渐变还能这么玩
    MessageChannel 消息通道
    前端面试(算法篇)
    JavaScript 中的相等操作符 ( 详解 [] == []、[] == ![]、{} == !{} )
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/13406716.html
Copyright © 2011-2022 走看看