openjdk7 在windows下编译过程及总结

系统: WindowsXP SP3

 

一、软件安装 

我所安装的软件版本下载地址: http://pan.baidu.com/s/1gzeV0 密码: 2pb4 

 

注意所有的软件安装路径不要有空格,如果已经安装的软件路径有空格的可以使用junction.exe 工具,在cmd下cd到junction目录执行:junction D:\BuildOpenJDK\MicrosoftSDKs “C:\Program Files\Microsoft SDKs”

1、OpenJDK7源码
openjdk-7-fcs-src-b147-27_jun_2011.zip 下载地址

http://download.java.net/openjdk/jdk7/ 密码: 2pb4 


2JAXP和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

将这4个压缩包放到D:/BuildOpenJDK/jdk7-drops目录下,设置set ALT_DROPS_DIR=该目录,构建jaxp和jaxws的ANT脚本会尝试从该目录查找这些zip

 

 

3、cygwin-2.85需手动安装一下包

文件名

分类

描述

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

另外还需搜索安装:libintl3

下载cygintl-3.dll放到cygwin安装目录bin下。

注意:安装的make.exe为3.82版,导致编译不能成功,需要从cygwin网站上下载3.80版本的make.exe放到bin目录下,将原来的覆盖。

4、Sun JDK 1.6 u14以上

5、Microsoft DirecxX SDK(sum2004)

建立ALT_DXSDK_PATH环境变量,指向安装目录。

6、Microsoft Visual Studio C++ 2010 (正式版或者Express版均可)

junction D:\BuildOpenJDK\MicrosoftSDKs “C:\Program Files\Microsoft SDKs”

建立WINDOWSSDKDIR环境变量,指向D:\BuildOpenJDK\MicrosoftSDKs\Windows\v7.0A 路径

msvcr100.dll,并建立ALT_MSVCRNN_DLL_PATH 环境变量指向该文件所在的目录。

7、Apache Ant 1.7.1以上

8、Freetype-2.3.5-1

建立ALT_FREETYPE_LIB_PATH 和ALT_FREETYPE_HEADERS_PATH环境变量,分别指向freetype安装目录下的lib目录和include目录。

将bin目录下的freetype6.dll和zlib1.dll复制到lib目录下。

 

 

二、环境变量

用批处理来设置环境变量,将以下命令复制到cmd窗口下执行,该环境变量的设置只对当前窗口生效,然后运行bash命令,在bash中执行:echo $PATH,查看环境变量是否设置正确。

SET JAVA_HOME=

SET classpath=

set ALT_BOOTDIR=D:/BuildOpenJDK/ProgramFiles/Java/jdk1.6.0_20

set ALT_CC_VER=16.00.30319.01

set ALT_MSC_VER_RAW=16.00.30319.01

set ALT_COMPILER_PATH=D:/VS2010/VC/bin

set ALT_DROPS_DIR=D:/BuildOpenJDK/jdk7-drops

set ALT_DXSDK_PATH=D:/BuildOpenJDK/DirectX9SDKSum2004

set ALT_FREETYPE_HEADERS_PATH=D:/BuildOpenJDK/FreeType/GnuWin32/include

set ALT_FREETYPE_LIB_PATH=D:/BuildOpenJDK/FreeType/GnuWin32/bin

set ALT_JDK_IMPORT_PATH=%ALT_BOOTDIR%

set ALT_MSVCRNN_DLL_PATH=D:/BuildOpenJDK/msvcr100

set ALT_MSVCRT_DLL_PATH=D:/BuildOpenJDK/msvcr100

set ALT_WINDOWSSDKDIR=D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A

set ANT_HOME=D:/BuildOpenJDK/apache-ant-1.9.2

set BUILD_CORBA=false

set COMPILER_VERSION=VS2010

set DXSDK_DIR=D:/BuildOpenJDK/DirectX9SDKSum2004/

set INCLUDE=D:/VS2010/VC/include;D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A/Include

set LANG=C

set LC_ALL=C

set LIB=D:/VS2010/VC/lib;D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A/Lib

set PATH=D:/BuildOpenJDK/MicrosoftSDKs/NETFX4.0Tools;D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A/bin;D:/VS2010/VC/bin;D:/VS2010/Common7/IDE;D:/cygwin/bin;%SystemRoot%/system32;%SystemRoot%;%SystemRoot%/System32/Wbem;%ANT_HOME%/bin;%ALT_FREETYPE_LIB_PATH%

set RC=D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A

set REBASE=D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A

set WINDOWSSDKDIR=D:/BuildOpenJDK/MicrosoftSDKs/Windows/v7.0A

 

路径中的分割符采用斜线(/)而不是反斜线(\)。

 

cygwin的bin目录在PATH中的位置应该在系统的System32目录之前(脚本中会用到cygwin的find命令,否则会用windows的find命令导致出错)。而VC++的bin目录应该在cygwin之前(同样的原因,编译需要用到的是VC++中的link.exe)。

 

三、Openjdk中的文件修改

 

文件: /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");

文件:/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
第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
第48行
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

 

四、编译

进入openjdk目录进行编译了。首先在设置环境变量的cmd窗口输入bash进入cygwin环境,然后输入make sanity进行环境变量检查,如果回显输出make sanity pass就可以继续,如果出错那么需要回头检查一下之前的设置是否正确。最后输入make进行编译即可。当然还有可能出错,那就要仔细查看错误输出再尝试解决了。

 

 

五、问题

1、ERROR: Cannot find the RC utility from path: 

This is normally obtained from the WINDOWSSDKDIR.

查看环境变量WINDOWSSDKDIR 对应的路径是否有空格。

2、NMAKE : fatal error U1077: 'if' : return code '0x1'

a、查看环境变量PATH中的环境变量是否都正确,且路径不能重复配置。

b、操作系统或者VS安装问题。可以自己写一个简单的makefile文件如:

all:

@echo test...

保存为t.mak,然后在doc下设置set PATH=D:/VS2010/VC/bin;

执行nmake t.mak查看是否异常。

 

你可能感兴趣的:(windows,openjdk 编译)