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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM