Mac上编译OpenJDK过程记录
编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型、机子具体环境的不同,很难有资料能够一步到位。还是得碰到具体问题通过上网查来一个个解决。
下载OpenJDK
由于网络环境还不错,所以这里采用通过版本管理来下代码。
安装mercurial版本管理
brew install mercurial
接下来clone源码
hg clone http://hg.openjdk.java.net/jdk8/jdk8
cd jdk8 && sh get_source.sh
安装一些依赖
安装FreeType,否则会出现configure: error: Could not find freetype!
brew install freetype
如果遇到
configure: error: GCC compiler is required. Try setting --with-tools-dir.
安装gcc48
$ brew install gcc48
$ sudo mkdir /usr/bin/backup && sudo mv /usr/bin/gcc /usr/bin/g++ /usr/bin/backup
$ sudo ln -s /usr/local/bin/gcc-4.8 /usr/bin/gcc
$ sudo ln -s /usr/local/bin/g++-4.8 /usr/bin/g++
安装ccache加速编译
$ brew install ccache
安装x11,地址https://www.xquartz.org/
$ ln -s /opt/X11/include/X11 /usr/local/include/X11
修改一些配置
hotspot/make/bsd/makefiles/gcc.make
我们需要干掉下面的代码,否则warnings会无法编译下去
# Compiler warnings are treated as errors
ifneq ($(COMPILER_WARNINGS_FATAL),false)
WARNINGS_ARE_ERRORS = -Werror
endif
这一段也要干掉,否则在后续编译中可能会出现clang: error: unknown argument: '-fpch-deps'
ifeq ($(USE_CLANG),)
ifneq ($(CC_VER_MAJOR), 2)
DEPFLAGS += -fpch-deps
endif
endif
加上下面这句话,否则在编译adlc时可能会出错
LFLAGS += -stdlib=libstdc++
common/autoconf/generate-config.sh
找到as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5出现的位置干掉,否则在config的时候可能会出现configure: error: GCC compiler is required
编译
配置configure
sudo sh ./configure --enable-debug
可以看到出现类似如下的内容
A new configuration has been successfully created in
/Users/robin/Code/cpp/jdk/jdk8/build/macosx-x86_64-normal-server-fastdebug
using configure arguments '--enable-debug'.
Configuration summary:
* Debug level: fastdebug
* JDK variant: normal
* JVM variants: server
* OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
Tools summary:
* Boot JDK: java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode) (at /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home)
* C Compiler: version (at /usr/bin/gcc)
* C++ Compiler: version (at /usr/bin/g++)
Build performance summary:
* Cores to use: 4
* Memory limit: 16384 MB
* ccache status: installed, but disabled (version older than 3.1.4)
开始编译
$ make
在成功之后可以看到如下提示
Finished building OpenJDK for target 'default'
调试
在编译好我们的OpenJDK后,我们可以开始调试了,这里我用的是Jetbrains的CLion作为IDE,Clion对makefile支持不是太好,不过就阅读和调试C++程序而言已经相当强大了。

加上一个调试hotspot的配置,在这里的Executable选择我们编译出来的jdk的java程序,路径如OpenJDK路径/build/macosx-x86_64-normal-server-fastdebug/jdk/bin/java
接下来我们便可以从java命令开始调试hotspot学习了

后记
由于编译过程因为OpenJDK版本、个人机型、软件环境等众多因素影响,以上流程、配置仅供参考。在遇到问题时多查查StackOverflow等网站,大多情况下都有人碰到过。
参考
《HotSpot实战》
Mac上编译OpenJDK过程记录的更多相关文章
- MAC 上编译安装nginx-rtmp-module 流媒体服务器
MAC 上编译安装nginx-rtmp-module 流媒体服务器 记录踩坑过程 下载nginx和nginx-rtmp-module wget http://nginx.org/download/ng ...
- Mac上编译并运行Android5.0源码
下载.配置环境.build和运行参考的都是Android Source提供的文档,包括:Initializing a Build Environment,Downloading the Source和 ...
- 尝试在Mac上编译DNX
自从XRE改名为DNX至今,从来没有在Mac OS X上成功编译过DNX.一直很纳闷,难道DNX的开发人员不用Mac?今天突然明白了,DNX的开发人员真的不用Mac.而且DNX用的2个持续集成服务Ap ...
- cgo在mac上编译
用了cgo mac上编译不过的可以试试下面的方法 ../../pkg/mod/github.com/mattn/go-sqlite3@v1.:: fatal error: 'stdlib.h' fil ...
- 剖析并利用Visual Studio Code在Mac上编译、调试c#程序
0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...
- 剖析并利用Visual Studio Code在Mac上编译、调试c#程序【转】
0x00 前言 一周多以前的微软的Build大会上,微软发布了一个让很多人眼前一亮的工具,也是本文的主角——Visual Studio Code.很多使用Windows的朋友都很高兴,认为又多了一个很 ...
- 为OPENCV添加freetype支持并显示中文字符(在mac上编译opencv及contrib库)
在mac电脑上管理这些gnu的库一般都使用Homebrew,但总有一些你个性化的需要是官方的Homebrew配方无法满足的.比如在屏幕的输出中使用中文字符. 在OPENCV中输出UTF8字符集早已经有 ...
- 2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
虽然参考了这个文章<MAC OS编译Android版Linphone SDK和APP>,https://www.lidaren.com/archives/1592 ,但是在实际的编译过程中 ...
- 关于编译openjdk过程的一个编码错误
-Xlint:deprecation 重新编译 或者 错误: 编码ascii的不可映射字符 出现这种错误的时候 可以进行设置jdk编译编码即可解决 因为是编译openjdk 所以在环境变量中设置: ...
随机推荐
- 【SpringBoot系列4】SpringBoot定制自己的bean
起因:SpringBoot我是越用越喜欢,但当SpringBoot出了问题的时候,我却无从下手,因为封装实在是太高度化了.然后之前有一个需求,使用SpringBoot提供的StringRedisTem ...
- 【手记】解决Resharper 2018.x起本机license server不能用的问题
ReSharper升级到2018版后,一直用的好好的本机license server(下称LS)不能用了,报The license server address is incorrect....在网上 ...
- [EWS]如何: 通过使用 Exchange 中的 EWS 流有关邮箱事件的通知
摘要 在之前的文章中,介绍ews拉通知的模式订阅邮件.详情可阅读这篇文章:EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒 ,可以看到拉通知的模式,是 ...
- cloudera Manager使用总结
最近在用cloudera Manager来 在几个虚拟机上进行hadoop 的安装,总结一下遇到的问题. 1 似乎没有 start-balancer.sh 命令 似乎安装包中没有这个命令 怎么 ...
- Java基础——死锁
1.关于死锁,百度百科的解释: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们将都无法进行下去.此时称系统处于死锁状态或系统产生了死锁 ...
- Chromium源码--网络请求流程分析
转载请注明出处:http://www.cnblogs.com/fangkm/p/3784660.html 本文探讨一下chromium中加载URL的流程,具体来说是从地址栏输入URL地址到通过URLR ...
- python学习之老男孩python全栈第九期_day011知识点总结
# 装饰器的形成的过程:最简单的装饰器:有返回值的:有一个参数的:万能参数# 装饰器的作用# 原则:开放封闭原则# 语法糖# 装饰器的固定模式:# def wrapper(f): # 装饰器函数,f是 ...
- MySql概念及常用Sql
MySQL是一个关系型数据库管理系统 MySQL启动命令: 本机mysql地址D:\pefession\mySql\mysql-8.0.12-winx64\bin 启动服务:net start mys ...
- [bug]解决chrome浏览器不支持所有媒体音乐不自动播放问题
声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...
- HTML5 简单归纳 -- 前端知识 (一)
HTML5简介 1.h5不是一个新语言,它是HTML语言第五次重大修改--版本 2. 2014年 h5 3.支持:目前所有的主流浏览器都支持h5,IE8以下不支持 4.特性: a:抛弃了h4中不 ...