转自:https://www.cnblogs.com/Vicent-Chen/p/7708932.html
1.准备环境:
1)编译openjdk对应的版本jdk6
我们可以直接去到http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html
,选择合适的包下载。下载前还需要注册一个Oracle帐号。下载好jdk-6u45-linux-x64.bin
后复制到想要的目录并运行,相同目录下就会创建一个包含有jdk的文件夹。
2)下载openjdk7
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev
cd jdk7u-dev
chmod 755 get_source.sh
./get_source.sh
3)准备environment.sh
#!/bin/sh
# environment.sh
# 语言选项,若不设置则会在编译好后出现一个HashTable的NPE错
export LANG=C
# Bootstrap JDK的安装路径
export ALT_BOOTDIR=#JDK安装路径(上文提到的Oracel JDK安装路径)
# 允许自动下载依赖
export ALLOW_DOWNLOADS=true
# 并行编译线程数,设置为和CPU内核数一样即可
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4
# 比较本次build出来的映像与先前版本的差异。这对我们来说没有意义
# 必须设置为false,否则sanity检查会报缺少先前版本JDK的映像的错误提示
# 如果已经设置 dev 或者 DEV_ONLY = true,这个不显式设置也行
export SKIP_COMPARE_IMAGES=true
# 使用预编译头文件,不加这个编译会慢些
export USE_PRECOMPILED_HEADER=true
# 要编译的内容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPORT=true
export BUILD_JDK=true
# 要编译的版本
# export SKIP_DEBUG_BUILD=false
# export SKIP_FASTDEBUG_BUILD=true
# export DEBUG_NAME=debug
# 把它设置为false可以避开javaws和浏览器Java插件之类的部分的build
BUILD_DEPLOY=false
# 把它设置为false就不会build出安装包,因为安装包里有奇怪的依赖项
# 但即便不build出它也已经能得到完整的JDK映像,所以还是不build
BUILD_INSTALL=false
# 编译结果存放路径
export ALT_OUTPUTDIR= #openjdk7 路径/build
# 这两个环境变量必须去掉,否则会有奇怪的事情发生
unset JAVA_HOME
unset CLASSPATH
# 这个环境变量是make sanity建议消除的
unset LD_LIBRARY_PATH
输入source environment.sh
,然后make sanity
检查
如果输出是Sanity check passed
,则证明检查通过,可以进行make了
2.编译openjdk7
- 输入
make 2>&1 | tee $ALT_OUTPUTDIR/build.log
进行编译 - 若出现以下信息,则证明编译成功
#-- Build times ----------
Target all_product_build
Start 2017-10-19 23:38:57
End 2017-10-19 23:53:03
00:00:11 corba
00:01:06 hotspot
00:00:02 jaxp
00:00:04 jaxws
00:12:41 jdk
00:00:02 langtools
00:14:06 TOTAL
-------------------------
关于Hotspot
- 进入
OpenJDK目录/hotspot/make
,复制environment.sh
,依次运行source environment.sh
,make
- Hotspot的编译与JDK的编译大体相似,但还是有所不同,主要修改的还是
environment.sh
- 如果是64位系统,在最后加上
export ARCH_DATA_MODEL=64
,否则会在编译过程中提示部分头文件找不到 - 编译的输出路径建议进行修改,不然jdk与hotspot的编译输出都会放在
build
下面,比较难分辨 - 编译完成后可以去
linux_amd64_compiler2/fastdebuf
下修改env.sh
,添加
LD_LIBRART_PATH=.:{JAVA_HOME}/jre/lib/amd64/native_threads:%{JAVA_HOME}/jre/lib/amd64:
export LD_LIBRARY_PATH
然后依次运行source env.sh
,./gamma -version
,如果编译成功,就能看到结果。
Netbeans
- 去到Netbeans官网下载最新版本并安装
- Netbeans 源码调试教程
-
该教程中有些地方与本文的介绍不太合适,这里是更正:
- Pre-Build Action: 此处输入的命令应为
./environment.sh
- Build-Action: 此处
Build Command
应该是${MAKE} -f Makefile clean jvmg ALT_BOOTDIR=environment.sh中的ALT_BOOTDIR ARCH_DATA_MODEL=64 LANG=C
- Pre-Build Action: 此处输入的命令应为
-
Netbeans下编译好的文件将会存放在
OpenJDK目录/hotspot/build/linux/linux_amd64_compiler2/jvmg
下。 -
错误
This OS is not supported
,可以使用这个方法:
修改hotspot/make/linux/Makefile,找到SUPPORTED_OS_VERSION变量定义的地方,在后面追加4%
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%