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 所以在环境变量中设置: ...
随机推荐
- Quartz2D简单图形
这些天一直准备学绘图和核心动画这块,可一直找不到合适系统的教材,没有大纲,比较纠结,在网上搜了又搜,看着其他的博文写的 第一遍来学习绘制简单的图形 // 若想利用Quartz 2D在View上绘制信息 ...
- DataGridView列标题(列标头)不能居中的解决方法
winform DataGridView列标题(列标头)不能完全居中的解决方法,一般列标题的居中我们都使用 DgvDemo.ColumnHeadersDefaultCellStyle.Alignmen ...
- vue项目webpack打包后图片路径错误
首先项目是vue-cli搭建的,项目结构如下: 然后发现在css里写的图片引用地址在开发时正常显示,但在打包扔上服务器之后报错 报的是404,路径前面多了/static/css,不知道为啥. 在自己慢 ...
- ajax 拼接html标签 thinkphp
ajax 拼接html标签 thinkphp框架 一.html部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional ...
- python-访问者模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的.比较稳定的对象结构, ...
- js-JavaScript常见的创建对象的几种方式
1.通过Object构造函数或对象字面量创建单个对象 这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为了解决这个问题,出现了工厂模式. 2.工厂模式 考虑在ES中无法创建类( ...
- Input type=number 样式清除
/* 普通IE浏览器 样式清除 */ input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{ -webkit-appear ...
- Flex自动回收导致监听不到ModuleEvent.READY事件
Flex中可以动态载入模块,以达到延迟加载,减小主程序体积的效果.通常可以使用如下代码: var iminfo:IModuleInfo = ModuleManager.getModule(" ...
- Intellij IDEA去除@Autowired下划线红色提示
Intellij IDEA通过@Autowired注入的对象,在不改变配置的情况下一直有红色下划线,虽然不影响运行,但是跟小Alan一样有强迫症的肯定受不鸟. 那么怎么去除它呢? 解决方式:改变@Au ...
- ecsop文件结构
Ecshop文件结构 :ecshop二次开发手册,ECSHOP文件结构,ECSHOP目录详解 /*ECShop 最新程序 的结构图及各文件相应功能介绍ECShop文件结构目录┣ activity.ph ...