Windows 7下构建OpenJDK7
来源:互联网 发布:软件使用文档 编辑:程序博客网 时间:2024/06/10 18:42
介绍了本人在Windows 7下编译OpenJDK的过程。
一、获取JDK源码
在http://download.java.net/openjdk/jdk7/下载最新的OpenJDK7源码openjdk-7-fcs-src-b147-27_jun_2011.zip,将其解压到E:盘目录下。
由于该openjdk的jaxp和jaxws目录下并不包含JAXP和JAX-WS的源码(它们分别可以在JAXP和JAX-WS的主页上下载),在
http://download.java.net/jaxp/1.4.5
下载jaxp-1_4_5-unittests.zip和jaxp145_01.zip,
在http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7
下载jdk7-jaxws2_2_4-b03-2011_05_27.zip
在https://java.net/downloads/jax-ws/JDK7/
下载jdk7-jaf-2010_08_19.zip
将这四个压缩包放到openjdk\java\devtools\share\jdk7-drops目录下,设置ALT_DROPS_DIR指向该目录,构建jaxp和jaxws的ANT脚本会尝试从该目录查找这些zip。
你还可以使用make ALLOW_DOWNLOADS=true来允许ANT下载需要的zip,不过这会产生太多不确定性,因此不推荐此做法。
二、配置环境
安装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
从http://ftp.gnu.org/pub/gnu/make下载make-3.82.tar.gz,在CYGWIN中解压,运行./configure && make安装。由于该make版本不支持C:/ style形式的路径,我从http://www.cmake.org/files/cygwin/make.exe下载了make.exe放到了CYGWIN的bin目录下。
安装JDK6,设置ALT_BOOTDIR,ALT_JDK_IMPORT_PATH指向该bootstrap JDK。注意不要设置JAVA_HOME和CLASSPATH。
安装ANT1.8.1,在Path中添加bin目录,设置ANT_HOME。
安装freetype-2.3.5-1-setup,设置ALT_FREETYPE_LIB_PATH 和ALT_FREETYPE_HEADERS_PATH,分别指向lib和include目录。
安装DirectX 9.0 SDK (Summer 2004),SDK的位置可以设置为ALT_DXSDK_PATH,不过通常由DirectX环境变量DXSDK_DIR就可以找到。
安装编译器VS2010,设置环境变量(在设置环境变量时,首先使用cygpath将路径转换为short路径,如cygpath –s –m D:\\Program\Files\\Microsoft\ SDKs\\Windows\\v7.0A,下面的设置直接按我当时的设置来,VS2010装在了系统D:盘和F:盘):
WINDOWSSDKDIR = D:/PROGRA~1/MICROS~4/Windows/v7.0A
INCLUDE = %WINDOWSSDKDIR%/include;F:/PROGRA~1/MICROS~1.0/VC/include;
LIB=% WINDOWSSDKDIR %/lib;F:/PROGRA~1/MICROS~1.0/VC/lib;
ALT_COMPILER_PATH= F:/PROGRA~1/MICROS~1.0/VC/bin
ALT_MSVCRNN_DLL_PATH 指向msvcr100.dll位置
Path中添加
F:/PROGRA~1/MICROS~1.0/VC/bin;%WINDOWSSDKDIR%/bin/NETFX4~1.0TO;%WINDOWSSDKDIR%/bin;F:/PROGRA~1/MICROS~1.0/Common7/IDE;D:/PROGRA~1/GnuWin32/bin;
在CYGWIN中,
echo $PATH
需要将/cygdrive/d/PROGRA~1/MICROS~4/Windows/v7.0A/bin/NETFX4~1.0TO:/cygdrive/d/PROGRA~1/MICROS~4/Windows/v7.0A/bin:移到
/usr/local/bin:/usr/bin之前,以使用VS中的工具命令进行编译。
TMP TEMP VS100COMNTOOLS VS90COMNTOOLS需要已经设置。
三、文件修改
FreeType 2.3.5版,库已经更名,不再叫freetype.dll,而是叫freetype6.dll,同时,多了一个依赖库zlib1.dll。将bin中freetype6.dll和zlib1.dll拷到lib下。
修改相关的makefile文件和java源文件:
/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-
OpenJDK分析VC版本是按英文版本来进行的,对于中文版VS2010需要修改。
/hotspot/make/windows/get_msc_ver.sh
61
MSC_VER_RAW=`cl 2>&1 |"$HEAD" -n 1 | "$SED" 's/.*Version[\]*\([0-9][0-9.]*\).*/\1/'`
if [ "${ALT_MSC_VER_RAW}" !="" ] ; then
MSC_VER_RAW=${ALT_MSC_VER_RAW}
else
MSC_VER_RAW=`cl 2>&1 |"$HEAD" -n 1 | "$SED" 's/.*Version[\]*\([0-9][0-9.]*\).*/\1/'`
fi
/jdk/make/common/shared/Compiler-msvc.gmk
49
CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/'| $(NAWK) '{print $$2}')
ifdef ALT_CC_VER
CC_VER := $(ALT_CC_VER)
else
CC_VER := $(shell $(CC)2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print$$2}')
endif
设置ALT_CC_VER和ALT_MSC_VER_RAW变量
ALT_CC_VER = 16.00.30319.01
ALT_MSC_VER_RAW = 16.00.30319.01
四、编译
进入openjdk根目录,执行“make sanity”检查我们前面所做的设置是否正确,如果看到“Sanity check passed.”说明检查过程通过,接下来输入“make”执行整个Makefile,等待不到一个小时的时间,JDK就可以编译成功了。
- Windows 7下构建OpenJDK7
- Windows下编译OpenJDK7
- Ubuntu 下编译 openJDK7
- ubuntu下编译openjdk7
- Linux下编译OpenJDK7
- Centos7 下编译openjdk7
- Ubuntu11.10下编译 OpenJDK7
- Linux CENTOS下编译openjdk7
- Linux CENTOS下编译openjdk7
- Ubuntu10.04下build OpenJDK7 的过程
- 32位ubuntu14下编译openjdk7
- ubuntu16.0.2LTS下编译OpenJDK7
- Ubuntu系统下切换Openjdk7和Openjdk8
- linux ubuntu 14. 04下 OpenJdk7编译
- Electron-windows下的构建
- windows下构建Go程序
- Windows 7下建立VPN连接和构建VPN服务器
- Windows下构建Mysql Cluster集群数据库
- 解决Eclipse不出提示
- “System.MissingMethodException: 找不到方法” 错误的解决方法
- dp,px,pt,sp 的区别 以及dp 和 px 互转
- 功能最强在的编辑器——vi
- jsp 学习资料
- Windows 7下构建OpenJDK7
- apk编译不生成odex
- 详细讲解提高数据库查询效率的实用方法、外键关于性能
- 视图切换总结
- 图像增强汇总
- android--对SD卡进行相关文件的操作
- ngx_string.c
- Android frameworks中Bn*和Bp*的区别
- SendMessage与PostMessage