编译hotspot8

编译hotspot8

ubuntu desktop 18 全新准备与编译过程再记录下:

 # 建议使用此gcc和g++版本,过高版本比如gcc7或引发编译报错
 sudo apt-get install gcc-4.8
 sudo apt-get install g++-4.8
 
 # 安装相关依赖
sudo apt-get install  libxext-dev libxrender-dev libxtst-dev libxt-dev
sudo apt-get install libcups2-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libasound2-dev
 

 #安装JDK8 并设置path  安装CDT 
 scp simon@172.16.106.122:/Users/simon/002.tools/jdk-8u211-linux-x64.tar.gz ./
gedit ~/.profile 
export JAVA_HOME=/home/simon/002.tools/jdk1.8.0_211
export  PATH="$PATH:$JAVA_HOME/bin"
source ~/.profile
java -version  
scp simon@172.16.106.122:/Users/simon/002.tools/eclipse-cpp-2019-06-R-linux-gtk-x86_64.tar.gz ./

# 安装版本管理工具 取代码用 切换到相应tag
cd /home/simon/600.self/03.code/02.cpp/hotspot-jdk8-b120/
# 这是我本地目录,对应的你自己创建就好
sudo apt-get install mercurial
# 获取代码 如果因为网络等问题取不下来,fanqiang吧
hg clone http://hg.openjdk.java.net/jdk8/jdk8
# 取好后切换到jdk8-b120分支 需要在目录 /home/simon/600.self/03.code/02.cpp/hotspot-jdk8-b120/jdk8下
hg up jdk8-b120
# 查看一下
hg identify
# 输出这个就对了  cd3825b29830 jdk8-b120
cd jdk8
chmod +x get_source.sh
sh get_source.sh

# 编译3.82的make cmake代码到 ftp://ftp.gnu.org/gnu/make/make-3.82.tar.gz取 假设我放在/home/simon/002.tools/make-3.82
cd /home/simon/002.tools/make-3.82
# 修改下面这个文件  否则编译make报错
gedit glob/glob.c
# 将 211行  232行注释掉
#// #if !defined __alloca && !defined __GNU_LIBRARY__
#// #endif

# 准备编译make3.82
chmod +x configure
./configure
make
./make --version

# 将系统的默认make链接成3.82版本
cd /usr/bin/
sudo ln -s  /home/simon/002.tools/make-3.82/make make-3.82
sudo rm make
sudo ln -s make-3.82 make
make --version
# 如果看到的是3.82就可以了

# 确认gcc和g++是4.8版本  如果是7.x版本 或会引发如下错误:
# error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.8 gcc
# g++同样操作即可
cd /usr/bin
sudo rm g++
sudo ln -s g++-4.8 g++

# 修改hotspot/make/linux/makefiles/gcc.make 文件207 行 WARNINGS_ARE_ERRORS = -Werror 改成 WARNINGS_ARE_ERRORS = -Wno-all

# 编译hotspot
# 修改支持的os版本检查
cd /home/simon/600.self/03.code/02.cpp/hotspot-jdk8-b120/jdk8
gedit hotspot/make/linux/Makefile
# 修改SUPPORTED_OS_VERSION =...   加上4%    不然4.x的内核不支持
# 如果存在build目录则删除
rm -rf build/
chmod +x configure
./configure --with-debug-level=slowdebug

nohup make all &
tail -f nohup.out

解压调试符号包并调试:

# 编译到最后 Exception in thread "main" java.lang.VerifyError: class jdk.nashorn.internal.objects.ScriptFunctionImpl 这种报错就忽略好了 不影响hotspot编译
# 编译好了后 解压调试符号表,
cd /home/simon/600.self/03.code/02.cpp/hotspot-jdk8-b120/jdk8/build/linux-x86_64-normal-server-slowdebug/jdk/lib/amd64/server 
unzip libjvm.diz

配合CDT使用,爽的飞起。

原文地址:https://www.cnblogs.com/simoncook/p/11198117.html