`
crukor
  • 浏览: 31751 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

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查看是否异常。

 

分享到:
评论
1 楼 zking3 2015-01-18  
你好,你这么做可以导出vs文件吗

相关推荐

    openjdk7 在windows下编译过程及总结-附件资源

    openjdk7 在windows下编译过程及总结-附件资源

    Win7下编译openjdk8源代码 完整版本 原创

    在介绍如何在Windows 7环境下编译OpenJDK 8源代码之前,有必要了解一些基础知识和前提条件。OpenJDK是Java平台的开源实现,其中包括JVM(Java虚拟机)和Java类库。OpenJDK的源代码使用C和C++编写,支持跨平台编译。...

    openjdk-17+35_windows-x64_bin.zip

    本文将深入探讨OpenJDK 17+35在Windows-x64平台上的特性和使用方法,为开发者提供详尽的参考。 一、OpenJDK 17概述 OpenJDK 17是Java Development Kit的第17个主要版本,其版本号中的“+35”表示该版本是基于特定...

    open_jdk_windows_32

    总结,OpenJDK为Windows 32位用户提供了一个免费且可靠的Java运行环境,尤其适合那些无法使用Oracle JDK的用户。通过下载、解压、配置环境变量以及验证安装,我们可以轻松地在32位系统上搭建起Java开发环境。同时,...

    openjdk-17.0.2(openjdk-17.0.2_macos-aarch64_bin.tar.gz)

    2. **强类型安全**:OpenJDK 17 提供了增强的类型检查,确保程序在编译期间就发现潜在的类型错误,减少运行时异常。 3. **文本块(Text Blocks)**:Java 13 引入的新语法特性,使得多行字符串的编写更加直观,减少...

    银河麒麟V10系统+飞腾CPU交叉编译Qt5.15

    在本文中,我们将深入探讨如何在银河麒麟V10操作...通过正确配置和安装所有必要的依赖,可以确保编译过程顺利进行。完成编译和安装后,用户将拥有一个针对特定平台定制的Qt环境,可用于开发和运行基于Qt的应用程序。

    openjdk-11.0.1_linux-x64_bin.tar.gz

    虽然OpenJDK 11.0.1针对的是Linux x64平台,但Java的跨平台特性意味着同一代码可以在其他支持Java的系统上运行,如Windows、macOS等,只需进行适当的调整。 9. **未来发展趋势** 自Java 11起,Oracle改变了Java的...

    mac 下jni编译代码

    在Mac环境下,JNI的编译过程可能会与Windows或Linux有所不同,因为每个操作系统有自己的库管理和编译工具链。本篇文章将深入探讨如何在Mac上进行JNI编译。 首先,确保你已经安装了Java Development Kit (JDK)。Java...

    Java Jdk V8 V11 V17集合下载(openjdk-17+35-windows-x64-bin.zip、jdk-1)

    1. **OpenJDK 17+35 for Windows x64** (openjdk-17+35-windows-x64-bin.zip): - **版本号**:OpenJDK 17+35 - **操作系统**:Windows x64 - **类型**:OpenJDK - **发布日期**:OpenJDK 17 发布于 2021 年 9 ...

    使用jdk、eclipse、MinGw在windows环境下搭建linux环境进行c/c++开发

    ### 使用JDK、Eclipse、MinGw在Windows环境下搭建Linux环境进行C/C++开发的知识点 #### 一、概述 在Windows环境下搭建一个能够支持C/C++开发的环境,通常需要安装一系列的软件和配置相应的环境变量。本文将详细介绍...

    ubuntu server 14.04上编译Hadoop 2.6.4

    - 在 Hadoop 目录下执行编译命令: ```bash mvn clean package -DskipTests -Dmaven.javadoc.skip=true -Pdist,native -Dtar ``` - 这个过程可能需要较长时间,请耐心等待。 #### 四、总结 通过以上步骤,您...

    jd-gui 反编译工具

    - **源代码完整性**:由于反编译过程是基于字节码逆向生成源代码,因此生成的源代码可能与原始源代码在语法和结构上有所不同,特别是当原始源代码包含复杂优化或元数据时。 - **版权问题**:反编译他人的代码可能...

    大数据Windows下虚拟机内部Hadoop的安装使用

    总结来说,本教程涵盖了在Windows虚拟机内安装和配置Linux,以及在Linux上编译和运行Hadoop的基本步骤。通过这个过程,你可以在本地环境中测试和开发大数据处理算法,为后续的大规模集群部署打下坚实基础。

    Kettle-9.5源码编译版

    在描述中提到,测试环境下使用的为openjdk-jre-11.0.20+8-windows-x64,这是Java运行环境,Kettle作为Java编写的应用,依赖JRE运行。因此,确保系统已安装兼容的Java版本是运行Kettle的前提。 在Windows 11系统上...

    jdk10 jdk-10.0.2_windows-x64_bin 网盘下载

    这在某些场景下可以减少对象创建的数量,从而降低垃圾回收的压力。 ##### 5. 常量动态类加载 JDK 10引入了`ClassDescriptor`和`ConstantDynamic`特性,允许在运行时动态生成类和方法。这对于框架和库的开发非常...

    java-1.8.0 for windows.x86

    对于开发者来说,OpenJDK与Oracle JDK在功能上基本保持一致,但在某些情况下,OpenJDK可能会提供更快的更新周期和对最新技术的支持。 总结来说,"java-1.8.0 for windows.x86"是一个专为32位Windows系统设计的Java...

    openjdk-research.调试汇编代码1

    在进行Java虚拟机(JVM)的研究与开发过程中,尤其是对于HotSpot虚拟机而言,有时我们需要深入到汇编代码层面来进行调试。这是因为HotSpot在执行Java字节码时,会将热点代码编译成本地机器码以提高执行效率。因此,...

    jdk-8u271-windows-x64

    总结起来,"jdk-8u271-windows-x64"代表了Oracle官方提供的Java 8更新版,它引入了诸如Lambda表达式、默认方法和方法引用等革新,是Windows 64位系统上的开发者必备工具。这个版本的JDK包含了一系列用于开发、编译和...

Global site tag (gtag.js) - Google Analytics