Linux 下编译OpenJDK

一.为什么编译OpenJDK?

因为这样可以自己对JDK做一些操作,比如加注释什么的
或者对JVM进行调试

二.如何编译

1.配置环境

 Ubuntu 版本 16.06

因为OpenJDK有些代码是有些基于C++,大部分是Java写的,所以需要一个JDK去编译这 些由Java所写的地方,这JDK官方称为Bootstrap JDK,我们要编译OpenJDK8 那就要使用JDK7为Bootstrap JDK

安装Bootstrap JDK
首先看你们的系统有无JDK7,看是不是JDK7,如果不是直接删除装JDK7
安装jdk相关操作

1. tar -zxvf jdk-7u80-linux-x64.tar -C /usr/local/java/jdk1.7.0_80
2. sudo gedit /etc/profile

    向profile文件末尾添加
	JAVA_HOME=/usr/local/lib/jdk解压目录
	CLASSPATH=.:$JAVA_HOME/bin.tools.jar
	PATH=$JAVA_HOME/bin:$PATH
	export JAVA_HOME CLASSPATH PATH
	
3. source /etc/profile 
4. java -version

	java version "1.7.0_80"
	Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
	Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

OpenJDK8 如何下载 ?
可以去 OpenJDK,不过我是在码云上下的,直接搜openjdk8然后找一个下载即可.
1.在OpenJDK根目录创建一个脚本文件 build.sh
内容如下

 #!/bin/bash  
 #设置语言  
  export LANG=C  
  #指定 Bootstrap JDK的安装目录
  export ALT_BOOTDIR=/usr/local/java/jdk1.7.0_80/ 
  #允许自动下载依赖包  
  export ALLOW_DOWNLOADS=true  

  #使用预编译头文件,不加这个编译会更慢  
  export USE_PRECOMPILED_HEADER=true  

  #要编译的内容  
  export BUILD_LANGTOOLS=true  
  export BUILD_JAXP=true  
  export BUILD_JAXWS=true  
  export BUILD_CORBA=true  
  export BUILD_HOSTPOT=true  
  export BUILD_JDK=true  

  #要编译的版本  
  export SKIP_DEBUG_BUILD=false  
  export SKIP_FASTDEBUG_BUILD=true  
  export DEBUG_NAME=debug  

  #把它设置为FALSE可以避免javaws和浏览器Java插件之类的部分build  
  BUILD_DEPLOY=false  

  #把它设置为false就不会build出安装包。因为安装包里有一些奇怪的依赖  
  #但即便不build出它也已经得到完整的JDK镜像,所以还是不用build它  
  BUILD_INSTALL=false  

  #存放编译结果  
  export ALT_OUTPUTDIR=/desktop/my/openjdk8/build

  unset CLASSPATH  
  unset JAVA_HOME  
  make all

make 降版本
Linux 下编译OpenJDK_第1张图片
需要make版本为3.81的但是 Ubuntu 版本 16.06 的make版本为4.1
make下载地址

1. tar -xjvf make-3.81.tar.bz2 
2. 进入解压目录
3. ./configure --prefix=/usr/local/make-3.81
4. sh build.sh
5. sudo cp make /usr/bin/make
6. make -v 

2.开始编译

位置openjdk的根目录

1. sh configure
   这一步会提醒你缺少什么东西缺啥装啥,如果报软件没有找到就更新一下源 sudo apt-get update
2. ./build.sh   
   

3.验证是否成功

cd build/linux-x86_64-normal-server-slowdebug/images/j2sdk-image/bin/
./java -version

4.可能遇到的问题

1.ERROR:××× recipe for target ‘check_os_version’ failed ×××
分析:./hotspot/make/linux/Makefile:226-240
添加对应的内核版本SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
2…ebugger/win32/coff/COFFFileParser C O F F F i l e I m p l COFFFileImpl COFFFileImplCOFFHeaderImpl$OptionalHeaderImpl$1.class (File name too long)
不要将openjdk在共享文件中解压和存放编译结果

3.中文问题 error: unmappable character for encoding ASCII
修改 /hotspot/make/linux/makefiles/rules.make
JAVAC_FLAGS = -g -encoding UTF-8
修改 jdk/make/Setup.gmk
-encoding ascii 为 -encoding UTF-8
这部分百度不到 openjdk8里面添加中文注释然后编译失败,上面是我瞎搞的,不过可以解决因为中文的问题而导致编译失败

首先因为openjdk8其实已经很老了,你用很新的系统去编译一个很老的东西,会出现很多兼容性问题

编译了一个星期linux系统都玩坏了好几个
Linux 下编译OpenJDK_第2张图片
欢迎关注公众号
Linux 下编译OpenJDK_第3张图片

参考:
深入理解Java虚拟机
https://blog.csdn.net/swif_N_F/article/details/79109136

你可能感兴趣的:(Java,OpenJDK,编译,编译OpenJDK,JDK8,编译OpenJDK8)