参考
http://gvsmirnov.ru/blog/tech/2014/02/07/building-openjdk-8-on-osx-maverick.html
前言
最近面试经常被文档java垃圾回收,虚拟机相关的问题,想想自己早前买了一本《深入理解Java虚拟机》从来没有好好看过,现在开始带着问题把它好好读读。不过按照书中的方法编译openjdk不成功。参考了上面的链接终于完成了编译。
步骤
一.源码安装包准备
- homebrew,mac系统的包管理器
-
mercurial,openJDK的代码版本管理工具,从来没用过。。。
可以使用brew安装。
brew install mercurial
有了代码管理工具就可以下载源码了
hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk8
全部clone到本地后,进入openjdk8目录,打开README文件,发现上面语句下载的只是java根资源下面的内容,按照提示还需要继续下载其他资源
cd openjdk8 && sh ./get_source.sh 继续看README的介绍 编译java还需要: * make的版本再3.81以上 * 需要jdk7u7版本以上的Jdk
更详细的一些信息需要看README-builds.html文件。
二.配置环境准备
README-builds.html文件里面说明了在linux,solaris,windows,mac4种主要系统种编译Java的环境参考。 其中对mac的说明很少
Install XCode 4.5.2 and also install the "Command line tools" found under the preferences pane "Downloads"
只有上面这一句,看似很简单其实不然,因为xcode 4.5是很老的mac系统使用的,目前新的系统已经无法安装了。。。而最新版本的xcode因为gcc版本的问题,无法编译java源码,直接编译会出现下面的错误。
configure: error: GCC compiler is required. Try setting --with-tools-dir.
所以我们需要使用其他的gcc来代替默认的,
brew install homebrew/dupes/apple-gcc42
sudo mkdir /usr/bin/backup && sudo mv /usr/bin/gcc /usr/bin/g++ /usr/bin/backup
$ sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
$ sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
之后执行
bash ./configure
可能会出现这个错误
configure: error: Could not find freetype!
configure exiting with result code 1
这个需要你下载xquartz,这个是绘图相关的一个软件。
安装好后继续执行
bash ./configure
配置成功!
接下来我们可以正式编译了
三.编译过程
执行
make
发现和参考的网页中出现同样的错误
hotspot/src/os/bsd/vm/os_bsd.cpp:1150:7: error: "__FreeBSD__" is not defined [-Werror=undef]
hotspot/src/os/bsd/vm/os_bsd.cpp:1152:7: error: "__OpenBSD__" is not defined [-Werror=undef]
hotspot/src/os/bsd/vm/os_bsd.cpp:1154:7: error: "__NetBSD__" is not defined [-Werror=undef]
按照如下步骤解决
pushd hotspot
curl https://gist.githubusercontent.com/gvsmirnov/8664413/raw > saproc_make_fobjc_exceptions_flag_fix.patch
hg import saproc_make_fobjc_exceptions_flag_fix.patch
popd
继续执行
make
…
----- Build times -------
Start 2014-02-06 21:20:36
End 2014-02-06 21:30:50
00:00:18 corba
00:06:57 hotspot
00:00:13 jaxp
00:00:18 jaxws
00:02:03 jdk
00:00:25 langtools
00:10:14 TOTAL
-------------------------
Finished building OpenJDK for target 'default'
成功了!参考得网页里面还遇到了其他得问题,应该是不同系统和不同源码版本导致得,如果各位遇到上面描述以外得问题可以去看下。
之后可以配置下环境变量使电脑使用你刚刚编译的java
vim ~/.bash_profile
export JAVA_HOME=/Users/mls-pc/projects/YourOpenJDKPath/build/macosx-x86_64-normal-server-release/jdk
source ~/.bash_profile
java -version
openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-mlspc_2016_04_02_09_03-b00)
OpenJDK 64-Bit Server VM (build 25.0-b70, mixed mode)
自己编译的jdk会显示你编译的时间在本版后面