标签归档:jvm

Ubuntu 16.04 LTS 编译Openjdk 8

  • 准备工作

Openjdk 源码使用mercurial 管理,但是国内网络环境使用mercurial 速度不理想,建议手工下载源码包。

另外编译Openjdk 之前必须有一个Bootjdk,对于Openjdk 8,Bootjdk 必须是Openjdk 7u7以上版本。通过 sudo apt-get install openjdk-7-jdk 安装。

之后需要安装如下依赖:

gawk:sudo apt-get install gawk

x11:sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev

cup:sudo apt-get install libcups2-dev

ant:sudo apt-get install ant

freetype:sudo apt-get install libfreetype6-dev

alsa:sudo apt-get install libasound2-dev

每个人机器环境不同,如果安装中报错有其他依赖,根据提示安装即可。

  • 编译参数

#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
export LANG=C

#Bootstrap JDK的安装路径。必须设置。
export ALT_BOOTDIR=/usr/lib/jvm/java-8-openjdk-amd64

#允许自动下载依赖
export ALLOW_DOWNLOADS=true

#并行编译的线程数,设置为和CPU内核数量一致即可
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4

#比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。
export SKIP_COMPARE_IMAGES=true

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

#要编译的内容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPOT=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=/home/fourier/Desktop/openjdk/build/

#这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些“”诡异的事情”,Makefile脚本检查到有这2个变量就会提示警告“)
unset JAVA_HOME
unset CLASSPATH

make 2>&1 | tee $ALT_OUTPUTDIR/build.log

  • 问题处理

[问题]

openjdk/hotspot/make/linux/makefiles/top.make:91: recipe for target ‘ad_stuff’ failed

[解决方案]

vim hotspot/make/linux/makefiles/adjust-mflags.sh

63 MFLAGS=`
64 echo “$MFLAGS” \
65 | sed ‘
66 s/^-/ -/
s/ -\([^ ][^ ]*\)j/ -\1 -j/
67 s/ -j[0-9][0-9]*/ -j/
68 s/ -j\([^ ]\)/ -j -\1/
69 s/ -j/ -j’${HOTSPOT_BUILD_JOBS:-${default_build_jobs}}’/
70 ‘ `
删除这一行

[问题]

os not supported error while building hotspot

[解决方案]

change hotspot/make/linux/Makefile
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3% 4%

  • 参考:

http://hadwinzhy.github.io/2013/01/21/compile-jdk/

https://focusvirtualization.blogspot.com/2016/11/current-java-version-on-my-ubuntu-gcc.html

http://www.linuxidc.com/Linux/2016-08/134267.htm