ubuntu上openjdk源代码编译

1 篇文章 0 订阅

编译环境

  • Ubuntu 16.04.6 LTS x86_64
    kernel 4.15.0-112-generic
  • openjdk源代码包:openjdk-7u75-src-b13-18_dec_2014.zip
  • Bootstrap JDK:jdk-6u45-linux-x64.bin

参照著作-深入理解Java虚拟机 JVM高级特性与最佳实践 第2版

文章中的编译环境如下

  • unbuntu 10.10
    该ubuntu版本较老,安装软件很不方便,因此采用ubuntu16.04.6 LTS
  • openJDK 7u6
    hg应该可以下载该版本,但是hg下载速度特别慢。由于该版本较老,已经很难找到对应的源码包。因此,采用了jdk7u75 b13
  • Bootstrap JDK:需要使用JDK6 u14之后,文章作者采用JDK7 u4
    由于版本较老,无法找到,因此采用了Hotspot JDK:jdk6 u45

编译文件夹说明

romulus@romulus-VirtualBox:~/testjdk$ ls -l
total 173172
drwxrwxr-x 29 romulus romulus      4096 729 22:01 build
-rw-rw-r--  1 romulus romulus       500 728 22:53 complie.sh
-rwxrwxr-x  1 romulus romulus  72087592 728 22:21 jdk-6u45-linux-x64.bin
drwxr-xr-x  8 romulus romulus      4096 327  2013 jdk1.6.0_45
drwxrwxr-x 11 romulus romulus      4096 729 20:29 openjdk
-rw-rw-r--  1 romulus romulus 105211444 728 22:21 openjdk-7u75-src-b13-18_dec_2014.zip

  • build -> 编译结果文件夹
  • compile.sh -> 设置环境变量的脚本
  • jdk-6u45-linux-x64.bin -> Bootstrap JDK压缩包
  • jdk1.6.0_45 -> Bootstrap JDK解压后的文件夹
  • openjdk-7u75-src-b13-18_dec_2014.zip -> openjdk源代码压缩包
  • openjdk -> openjdk源代码目录

安装编译软件

  • apt-get install
    sudo apt-get -y install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif-dev ant
    注:libmotif3不需要安装,openjdk-6-jdk通过其他方式安装
  • Bootstrap openjdk
sudo update-alternatives --install /usr/bin/java java /home/romulus/testjdk/jdk1.6.0_45/bin/java 1082
 sudo update-alternatives --install /usr/bin/javac javac /home/romulus/testjdk/jdk1.6.0_45/bin/javac 1082
 sudo update-alternatives --install /usr/bin/jar jar /home/romulus/testjdk/jdk1.6.0_45/bin/jar 1082
 sudo update-alternatives --install /usr/bin/javah javah /home/romulus/testjdk/jdk1.6.0_45/bin/javah 1082
 sudo update-alternatives --install /usr/bin/javadoc javadoc /home/romulus/testjdk/jdk1.6.0_45/bin/javadoc 1082
 sudo update-alternatives --install /usr/bin/javap javap /home/romulus/testjdk/jdk1.6.0_45/bin/javap 1082

设置环境变量的脚本

compile.sh

export LANG=C
export ALT_BOOTDIR=/home/romulus/testjdk/jdk1.6.0_45

export ALLOW_DOWNLOADS=true

export HOTSPOT_BUILD_JOBS=1
export ALT_PARALLEL_COMPILE_JOBS=1

export SKIP_COMPARE_IMAGES=true

export USE_PRECOMPILED_HEADER=true

export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true

export BUILD_DEPLOY=false

export BUILD_INSTALL=false

export ALT_OUTPUTDIR=/home/romulus/testjdk/build

unset JAVA_HOME
unset CLASSPATH

编译错误处理

编译前,修改一下文件,以避免编译错误

  • *** This OS is not supported:
    openjdk 7u75源代码开发的时候,linux版本只有2.4, 2.5,2.6和3。可以直接添加4%,因为linux kernel一般是向后兼容的
openjdk/hotspot/make/linux/Makefile +240
#SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
  • ERROR: libjvm.so: undefined reference to `void G1SATBCardTableModRefBS::write_ref_array_pre_work
openjdk/hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp +87
  template <class T> void write_ref_array_pre_work(T* dst, int count);
/*  virtual void write_ref_array_pre(oop* dst, int count, bool dest_uninitialized) {
    if (!dest_uninitialized) {
      write_ref_array_pre_work(dst, count);
    }
  }
  virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized) {
    if (!dest_uninitialized) {
      write_ref_array_pre_work(dst, count);
    }
  }
*/

  • java.lang.RuntimeException: time is more than 10 years from present
    修改该文件的日期
openjdk/jdk/src/share/classes/java/util/CurrencyData.properties
修改5处地方:108行、381行、443行、535行、561行
这5处地方的日期修改成当前日期即可
  • 参考链接
    https://blog.csdn.net/leonliu06/article/details/78495035
    https://blog.csdn.net/BreezeQian/article/details/103212671

编译步骤

romulus@romulus-VirtualBox:~/testjdk/openjdk$ pwd
/home/romulus/testjdk/openjdk
source ../compile.sh
make sanity
make 2>&1 | tee build.log

编译结果

  • 输出log
########################################################################
##### Leaving jdk for target(s) sanity all docs images             #####
########################################################################
##### Build time 00:19:47 jdk for target(s) sanity all docs images #####
########################################################################

#-- Build times ----------
Target all_product_build
Start 2020-07-29 21:40:18
End   2020-07-29 22:01:47
00:00:39 corba
00:00:39 hotspot
00:00:06 jaxp
00:00:10 jaxws
00:19:47 jdk
00:00:07 langtools
00:21:29 TOTAL
-------------------------
  • 使用编译出来的openjdk
romulus@romulus-VirtualBox:~/testjdk/build/j2sdk-image$ pwd
/home/romulus/testjdk/build/j2sdk-image
romulus@romulus-VirtualBox:~/testjdk/build/j2sdk-image$ ./bin/java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-romulus_2020_07_29_21_06-b00)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值