系统需求: Windows XP SP3 / Windows 7 (强烈推荐用英文版系统进行构建,原因后详)
所需软件: Cygwin
Sun JDK 1.6 u14以上
Microsoft DirecxX SDK
Microsoft Visual Studio C++ 2010 (正式版或者Express版均可)
Apache Ant 1.7.1以上
Freetype-2.3.5-1
openjdk-7-fcs-src-b147-27_jun_2011.zip
Vim(可选,推荐编辑器)
构建步骤:
以下涉及安装软件的步骤,都建议将软件安装到没有空格非中文的路径,且安装的目录名精简一些。
1. 首先安装Cygwin,所需的包如下所示:
文件名
|
分类
|
包
|
描述
|
ar.exe
|
Devel
|
binutils
|
The GNU
assembler, linker and binary utilities
|
make.exe
|
Devel
|
make
|
The GNU
version of the 'make' utility built for CYGWIN
|
m4.exe
|
Interpreters
|
m4
|
GNU
implementation of the traditional Unix macro processor
|
cpio.exe
|
Utils
|
cpio
|
A program to
manage archives of files
|
gawk.exe
|
Base
|
awk
|
Pattern-directed
scanning and processing language
|
file.exe
|
Utils
|
file
|
Determines
file type using 'magic' numbers
|
zip.exe
|
Archive
|
zip
|
Package and
compress (archive) files
|
unzip.exe
|
Archive
|
unzip
|
Extract
compressed files in a ZIP archive
|
free.exe
|
System
|
procps
|
Display amount
of free and used memory in the system
|
需要注意的是,安装的make.exe为3.82版,导致编译不能成功,需要从cygwin网站上下载3.81版本并覆盖到bin目录。也可以下载源码之后自己编译一个(需要gcc包)。最后将cygwin的bin目录添加到PATH环境变量。
2.
安装JDK6,版本需要u14以上(官方文档中称作Bootrap JDK),我采用的是u31版本。建立ALT_BOOTDIR和ALT_JDK_IMPORT_PATH环境变量,指向JDK的目录。注意不要设置JAVA_HOME和CLASSPATH环境变量。
3. 安装Apache Ant,版本1.7.1以上,我采用的是1.8.2。建立ANT_HOME环境变量。
4. 安装Freetype-2.3.5-1,建立ALT_FREETYPE_LIB_PATH 和ALT_FREETYPE_HEADERS_PATH环境变量,分别指向lib目录和include目录。将bin目录下的freetype6.dll和zlib1.dll复制到lib目录下。
5.
安装DirectX SDK。强烈建议此步在安装Visual
Stuido 2010 (Express)之前进行,否则有可能DirectX
SDK无法正常安装成功。建立ALT_DXSDK_PATH环境变量,指向安装目录。
6. 安装Microsoft Visual Studio C++ 2010 ,我采用的是Express版本(免费)。安装过程中会自动安装Windows SDK,且不能指定路径,在C:\Program Files\下。建立ALT_COMPILER_PATH 环境变量,指向VC++的bin目录。同时用以下命令将Windows SDK的目录转换为short路径(需要安装cygwin):
Cygpath
–s –m “C:\Program Files\Microsoft SDKs\Windows\v7.0A”
之后建立WINDOWSSDKDIR
环境变量,指向该short路径。
将WINDOWSSDKDIR
下的lib目录和VC++下的lib目录添加到LIB环境变量。
将WINDOWSSDKDIR
下的include目录和VC++下的include目录添加到INCLUDE环境变量。
去下载一个msvcr100.dll,并建立ALT_MSVCRNN_DLL_PATH
环境变量指向该文件所在的目录。如果你安装了Visual Studio C++ 2010,那么在你的系统中应该能找到这个文件,但是我用系统中自带的这个文件编译出的JDK不能正常运行,用下载的替换之后才可以。
7.
解压openjdk-7-fcs-src-b147-27_jun_2011.zip,下载jaxp-1_4_5-unittests.zip、jaxp145_01.zip、jdk7-jaf-2010_08_19.zip、jdk7-jaxws2_2_4-b03-2011_05_27.zip四个文件放在openjdk\java\devtools\share\jdk7-drops目录下。并建立ALT_DROPS_DIR
环境变量指向该目录。
8.
完善并检查环境变量,我写了一个批处理来进行环境变量设置:
SET VSINSTALLDIR=C:/PROGRA~2/MICROS~1.0
SET WINDOWSSDKDIR=D:/jdkBuild/sdk
SET ALT_BOOTDIR=D:/jdkBuild/JDK16~1.0_X
SET ALT_JDK_IMPORT_PATH=D:/jdkBuild/JDK16~1.0_X
SET ANT_HOME=D:/jdkBuild/APACHE~1.4
SET ALT_MSVCRNN_DLL_PATH=D:/jdkBuild/msvcr100
SET ALT_DXSDK_PATH=D:/jdkBuild/msdxsdk
SET ALT_FREETYPE_HEADERS_PATH=D:/jdkBuild/freetype/include
SET ALT_FREETYPE_LIB_PATH=D:/jdkBuild/freetype/lib
SET ALT_COMPILER_PATH=%VSINSTALLDIR%/VC/bin/
SET ALT_DROPS_DIR= D:/jdkBuild/openjdk/java/devtools/share/jdk7-drops
SET PATH=%WINDOWSSDKDIR%/Bin/NETFX4~1.0TO;%WINDOWSSDKDIR%/Bin;%VSINSTALLDIR%/VC/bin;%VSINSTALLDIR%/Common7/IDE;E:/cygwin/bin;%PATH%
SET INCLUDE=%VSINSTALLDIR%/VC/INCLUDE;D:/jdkBuild/sdk/INCLUDE
SET LIB=%VSINSTALLDIR%/VC/Lib;D:/jdkBuild/sdk/Lib
SET ALT_CC_VER = 16.00.30319.01
SET ALT_MSC_VER_RAW = 16.00.30319.01
其中带~的路径均为cygpath所转化所得的short路径。
建议路径中的分割符采用斜线(/)而不是反斜线(\),Windows资源管理器的默认显示路径是后者。如果采用反斜线,有可能在编译过程中某些脚本识别不出路径,从而出错。
同时cygwin的bin目录在PATH中的位置应该在系统的System32目录之前(脚本中会用到cygwin的find命令,否则会用windows的find命令导致出错)。而VC++的bin目录应该在cygwin之前(同样的原因,编译需要用到的是VC++中的link.exe)。
9.
修改文件。
文件: /jdk/make/sun/font/Makefile:
第126行:
FREETYPE_LIB
=$(LIB_LOCATION)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX)
改为:
FREETYPE_LIB =$(LIB_LOCATION)/$(LIB_PREFIX)freetype6.$(LIBRARY_SUFFIX)
ZLIB1_LIB =$(LIB_LOCATION)/$(LIB_PREFIX)zlib1.$(LIBRARY_SUFFIX)
第137,138行:
$(FREETYPE_LIB):
$(CP)$(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX) $@
改为:
$(FREETYPE_LIB): $(ZLIB1_LIB)
$(CP)$(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype6.$(LIBRARY_SUFFIX) $@
$(install-module-file)
$(ZLIB1_LIB):
$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)zlib1.$(LIBRARY_SUFFIX)$@
文件:jdk/make/tools/freetypecheck/Makefile
第41行:
FREETYPE_DLL =$(FREETYPE_LIB_PATH)/freetype.dll
改为:
FREETYPE_DLL =$(FREETYPE_LIB_PATH)/freetype6.dll
ZLIB1_DLL = $(FREETYPE_LIB_PATH)/zlib1.dll
第72行下加入:
$(CP) $(ZLIB1_DLL) $(@D)/
文件:jdk/src/share/classes/sun/font/FontManagerNativeLibrary.java
第59行:
System.loadLibrary("freetype");
改为:
System.loadLibrary("freetype6");
OpenJDK的部分java文件注释是中文的。javac却指定了ascii编码方式(添加了参数-encoding
ascii)。遇到包含中文的java文件,javac会报错。因此需要将-encoding编译选项去掉。
文件:/corba/make/common/shared/Defs-java.gmk
第133行:
JAVACFLAGS += -encoding ascii
改为:
# JAVACFLAGS += -encoding ascii
第194行:
BOOT_JAVACFLAGS += -encoding
ascii -source$(BOOT_SOURCE_LANGUAGE_VERSION) -target
$(BOOT_TARGET_CLASS_VERSION)
改为:
BOOT_JAVACFLAGS += -source $(BOOT_SOURCE_LANGUAGE_VERSION)-target
$(BOOT_TARGET_CLASS_VERSION)
文件:/jdk/make/common/shared/Defs-java.gmk
第134行:
JAVACFLAGS += -encoding ascii
改为:
# JAVACFLAGS += -encoding ascii
第212行:
BOOT_JAVACFLAGS += -encoding
ascii -source$(BOOT_SOURCE_LANGUAGE_VERSION) -target
$(BOOT_TARGET_CLASS_VERSION)
改为:
BOOT_JAVACFLAGS += -source$(BOOT_SOURCE_LANGUAGE_VERSION) -target
$(BOOT_TARGET_CLASS_VERSION)
文件:/hotspot/make/windows/makefiles/rules.make
第48行:
JAVAC_FLAGS=-g -encoding ascii
改为:
JAVAC_FLAGS=-g
OpenJDK启用了VC的“将警告视为错误”(warnings
as errors)选项。如果链接器生成警告,/WX 将不会生成任何输出文件。
文件:/hotspot/make/windows/makefiles/compile.make
第53行:
CPP_FLAGS=/nologo /W3 /WX
改为:
CPP_FLAGS=/nologo /W3 /WX-
文件:/hotspot/src/share/tools/hsdis/Makefile
第92行:
CFLAGS += /nologo /MD /W3
/WX /O2 /Fo$(@:.dll=.obj) /Gi-
改为:
CFLAGS += /nologo /MD /W3
/WX- /O2 /Fo$(@:.dll=.obj) /Gi-
文件:/hotspot/make/windows/get_msc_ver.sh
/jdk/make/common/shared/Compiler-msvc.gmk
由于get_msc_ver.sh脚本文件是根据cl.exe的输出信息来判断编译器的版本的,而这个脚本只考虑了输出信息为英文的情况,所以本文开头强烈建议使用英文版的系统以及VS进行编译。如果你使用中文系统,那么有两个选择,一是将系统的区域和语言设置改为英文;二是直接将MSC_VER_RAW和CC_VER两个变量的值写入这两个文件(当然前提是你确保使用的编译器版本正确)。第二种方法我没有尝试成功,最后在虚拟机中安装了英文系统才编译通过。
另外编译过程中如果出现COMPILER_VERSION没有设置的提示,那么可以直接将COMPILER_VERSION = VS2010写入Compiler-msvc.gmk。
10. 下面就可以进入openjdk目录进行编译了。首先输入bash进入cygwin环境,然后输入make sanity进行环境变量检查,如果回显输出make sanity pass就可以继续了,如果出错那么需要回头检查一下之前的设置是否正确。最后输入make进行编译即可。当然还有可能出错,那就要仔细查看错误输出再尝试解决了。
我的机器是i5 4G,在虚拟机中分配了1G的RAM(如果你的RAM小于512M,编译的时候工具会提醒你也许会很耗时),总共用了半个小时多一点编译完成。
分享到:
相关推荐
OpenJDK7是OpenJDK项目的一个重要版本,对应Java 7标准。本资源是关于OpenJDK7源码的分析和学习资料,旨在帮助开发者深入理解Java虚拟机的工作原理。 首先,我们来了解一下Java虚拟机的主要组件和功能: 1. **类...
在 Windows 环境下,可以使用 Xshell 登录 Linux 终端进行编码。使用 Xshell 需要先下载和安装个人/学校免费版,然后选择“新建”连接,设置里选择 SSH,主机填入需要连接的主机的 IP 地址,并选择 UTF-8 编码。 2....
### Java核心笔记——CoreJava详解 #### 一、Java运行时环境概述 ##### 1. JVM (Java Virtual Machine) JVM 是 Java 虚拟机的简称,它是一种抽象计算机,能够执行字节码(Bytecode)的软件层。字节码是一种中间...
编译方法打开jdk源代码阅读注释,编译方法参考同目录下的bu.sh,主分支是注释分支,编译代码请用compile_branch2.阅读笔记readnote目录,同时在对应的java文件里面有注释,不过中文注释会导致失败,所以用英文注释。...
总结而言,本笔记详细介绍了在Linux环境下使用httpd部署静态网站的前序步骤,包括Java环境和Tomcat服务器的安装、配置和部署,以及如何对Tomcat进行基本的管理和维护。通过这些步骤,可以使Web服务器运行Java Web...
7. **JVM相关规范**:了解Java虚拟机规范(如Java SE的JVM规范),以及不同的JVM实现,如Oracle HotSpot、OpenJDK等。 通过以上内容的学习,可以逐步提升对Java运行机制的理解,不仅有助于解决日常开发中的问题,也...
学习JDK 源码必备,提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初...
7. **OpenJDK**:2006年,Sun宣布将Java开源,成立了OpenJDK项目,后来Oracle收购Sun后继续推动OpenJDK的发展。 8. **Java 9/10/11**:这些版本着重于模块化系统(Jigsaw项目)、JVM性能提升和开发者体验改善。 9....
sudo apt-get install openjdk-7-jdk ``` 接下来,我们需要获取Google的repo工具,这是一个Python脚本,用于管理多个Git仓库。你可以通过以下命令下载并安装repo: ```bash curl ...
可以将其视为带有一些笔记的餐巾纸,但是在这种情况下,笔记会被编译,有时会吐出一些有用的东西。 换句话说,没有保证,也没有质量控制标签。 就是说,j2c成功地将大多数OpenJDK 6和SWT 3.7转换为可编译并通
6. **Oracle JDK vs OpenJDK**:Oracle JDK是官方商业版本,包含额外的工具和技术支持,而OpenJDK是开源实现,两者在功能上基本一致,但OpenJDK通常免费使用。 7. **Java 与 C++ 的区别**:Java更强调安全性,没有...
这是一个puppet示范项目,兼作我的运维学习笔记,在现实世界运行着,有三个成功案例,各管理100多台服务器,都是小型B2C网站,这些网站的架构大致如下图(图是网站上线前设计的,实际实施有所变化): 我花了约100...
编程简介”课程时的笔记 介绍 用于 JVM 和 JS 的 Kotlin。 在 JVM 上,它生成字节码。 适用于任何类型应用程序(服务器、Web、桌面、移动设备)的实用语言 Kotlin 与 Java6 兼容,没有样板代码。 语言更简洁。 受 ...
在"系统开源"这个标签下,我们可以推测这个项目可能是基于开源的JDK版本,如OpenJDK。OpenJDK是一个开放源代码的实现,遵循GPLv2许可证,它提供了JDK的全部源代码,使得开发者可以自由地查看、学习和贡献。 学习JDK...