编译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使用,爽的飞起。

编译hotspot8的更多相关文章

  1. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  2. Centos6.5下编译安装mysql 5.6

    一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...

  3. CENTOS 6.5 平台离线编译安装 PHP5.6.6

    一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...

  4. CENTOS 6.5 平台离线编译安装 Mysql5.6.22

    一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...

  5. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

  6. Hawk 6. 编译和扩展开发

    Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...

  7. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  8. 在Windows上编译和调试CoreCLR

    生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...

  9. 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~

    这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...

随机推荐

  1. Java中Map的entrySet()详解

    转发:原博客 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系.Map中采用Entry内部类来表示一个映射项,映射项包含Key和ValueMap.Entry里面包含getKey() ...

  2. MacOS系统隐藏文件操作

    显示或关闭隐藏文件 显示:defaults write com.apple.finder AppleShowAllFiles -bool true ; killall Finder隐藏:default ...

  3. css属性inline-block的应用

    1. 让两个块级元素处于同一行 2. 需要元素撑开边框的时候

  4. 题解 洛谷 P4602 【[CTSC2018]混合果汁】

    注意到问题具有单调性,所以一个询问可以通过二分答案来解决. 对于多组询问,就采用整体二分来处理. 将果汁按\(d\)从大到小排序,二分出一个位置\(mid\),只考虑在位置\(mid\)之前的果汁,其 ...

  5. Monster Audio 使用教程 (六) 发送音轨的设置

    因为最近有些用户,不太清楚怎么发送给混响音轨,所以这里我简单介绍一下. Monster Audio的音轨,主要分为两种类型: 1.白色推子:表示普通音轨 2.蓝色推子:表示“可接收发送音轨”,其他音轨 ...

  6. es6 Proxy简单使用

    es6的Proxy是什么? 可以理解为,是在访问对象前的一层拦截.只要访问的该对象,就要通过这个一层拦截.这一层的拦截,可以进行数据的过滤和更改 比如下面这个 var p = new Proxy({} ...

  7. JVM系列之:对象的锁状态和同步

    目录 简介 java对象头 java中锁状态的变化 偏向锁biased locking 轻量级锁thin lock 重量级锁 三种锁状态的不同 简介 锁和同步是java多线程编程中非常常见的使用场景. ...

  8. vue学习(十四) 条件搜索框动态查询表中数据 数组的新方法

    //html <div id="app"> <label> 名称搜索关键字: <input type="text" clasa=& ...

  9. 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言

  10. Python File next() 方法

    概述 next() 方法在文件使用迭代器时会使用到,在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,如果到达结尾(EOF),则触发 StopIteration高佣联盟 www.c ...