最近因为工作需要编译了openjdk-8,在这里记录一下编译流程和遇到的问题。
本次编译了amd64和arm64两个版本。
目录
amd64
环境:ubuntu2004
编译的代码是openjdk-8u41-b04-linux-x64-14_jan_2020
cd openjdk
./configure
根据configure的提示安装编译依赖,需要安装jdk7或者jdk8作为boot jdk
安装依赖
我这里选择了安装java7,下载地址在这里
tar -xzf *.gz
#创建新的文件夹
mkdir /usr/lib/jvm
mv jdk1.7.0_80 /usr/lib/jvm
#修改文件夹名称
mv /usr/lib/jvm/jdk1.7.0_80 /usr/lib/jvm/java-7-sun
sudo vim ~/.bashrc
#在文件末尾写入以下内容
export JAVA_HOME=/usr/lib/jvm/java-7-sun
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
然后执行以下命令
source ~/.bashrc
之后在任意终端输入java -version,如果能正常显示以下内容说明安装成功。
然后安装以下依赖:
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
sudo apt-get install libcups2-dev
sudo apt-get install libasound2-dev
安装完成后再次执行configure,如果终端输出如下内容说明执行成功
编译
需要将安装gcc4并修改部分编译文件
sudo vim /etc/apt/sources.list
# 添加两行数据到最后:
# # for gcc 4.* g++ 4.*
# deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
# deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
#安装gcc4
sudo apt-get install g++-4.9
sudo rm g++ && sudo ln -s g++-4.9 g++
sudo rm gcc && sudo ln -s gcc-4.9 gcc
sudo rm gcc-ar && sudo ln -s gcc-ar-4.9 gcc-ar
sudo rm gcc-nm && sudo ln -s gcc-nm-4.9 gcc-nm
sudo rm gcc-ranlib && sudo ln -s gcc-ranlib-4.9 gcc-ranlib
sudo rm gcov && sudo ln -s gcov-4.9 gcov
vim ./hotspot/make/linux/Makefile
#修改内容如下:
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4% 5%
vim ./hotspot/make/linux/makefiles/gcc.make
# 修改源代码如下:
208 # WARNINGS_ARE_ERRORS = -Werror
209 WARNINGS_ARE_ERRORS = -Wno-all
修改完成后进行make,如果make出错,重新执行configure文件再进行make。
编译成功会有如下显示:
编译完成的文件都在build目录下,我们执行一下编译的java测试一下。
注意:java7查看版本的指令是java -version,而不是java --version,如果执行后一个命令,java会有如下报错。
补充:
刚刚的编译流程没有使用任何参数,因此显示的java版本是1.8.0-internal。
java -version输出的参数都是可以修改的。
./configure --with-milestone=fcs --with-update-version=41 --with-build-number=b04
我们在执行configure的时候加上参数,再进行make,java -version的内容就可以改变。
版本的最后一行貌似也是可以修改的,但是我没有找到修改方法。
知道的朋友方便的话可以补充在评论区嘛?非常感谢!
arm64
arm参考别人的方案使用了飞腾ARM,麒麟LINUX。
openjdk原生是只支持amd64的,想在arm上编译需要修改编译文件。
我们这里直接用别人修改好的,在这里下载。
安装依赖的部分同amd64,然后直接make即可,不需要安装gcc4。