在Windows上构建OpenJDK

通过做一些实验,我发现手头提供JDK源代码来进行一些更改,使用它等等通常很有用。因此,我决定下载并编译该野兽。 显然,这花了我一些时间,尽管我最初的想法是,它应该和运行make命令一样简单:)。 您可能会猜到,我发现这不是一项微不足道的任务,并且为了简化以后的生活,保留一些有关我正在做的事情的记录将非常有用。

以下是我要做的步骤。 我认为计算机已经安装了Visual Studio 2010。 我觉得Express版本应该可以正常工作,但是我还没有尝试过。

  1. 安装cygwin。 确保已安装此处列出的所有软件包,其中一些默认情况下未安装。 以防万一,这是该表的副本,但建议与主源进行验证:
    二进制名称 类别 描述
    可执行文件 开发 Binutils GNU汇编器,链接器和二进制实用程序
    制作工具 开发 使 为CYGWIN构建的'make'实用程序的GNU版本。
    可执行文件 口译员 m4 传统Unix宏处理器的GNU实现
    cpio.exe 实用程序 cpio 一个管理文件存档的程序
    gawk.exe 实用程序 awk 模式导向的扫描和处理语言
    文件 实用程序 文件 使用“魔术”数字确定文件类型
    压缩文件 封存 压缩 打包和压缩(存档)文件
    解压缩文件 封存 解压缩 提取ZIP档案中的压缩文件
    免费版 系统 ps 显示系统中的可用和已用内存量

    不要忘记将cygwin的'bin'文件夹添加到PATH中。

  2. 从此处安装Mercurial并将“ hg”添加到PATH。
  3. 安装用于Windows 7和.NET Framework 4的Microsoft Windows SDK 。
  4. 安装DirectX SDK 。 JDK需要v9.0,但我很难找到它。 所以我决定不打扰并安装最新的。 似乎工作正常。
  5. Bootstrap JDK是构建所必需的。 碰巧我使用了JDK6,但是假设任何> JDK6的版本都不会出现问题。
  6. 下载并安装Ant 。 我使用的是1.8.2版本。 将Ant添加到PATH。
  7. 结帐来源。 由于多种原因,它是最复杂的部分。 “ hg”不是特别稳定,因此某些应该由我的脚本完成的操作是手动完成的。

    因此,要在命令行中开始运行此命令:

    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u <some_folder>\openjdk7'

    这应该下载带有一些帮助脚本的根文件夹。

    然后在cygwin中,转到刚刚创建的“ openjdk7”文件夹并运行“ get_source.sh”。 “ get_source.sh”可能会失败或只是挂起(这正是我所发生的事情)。 如果是这样,则您可以尝试使用“ –pull”标志(元数据的拉协议)。 我不确定为什么,但这对我有所帮助。 不幸的是,脚本不是以非常友好的方式编写的,并且无法将任何“ hg”参数传递给源检索脚本。 因此,您需要转到“ make \ scripts \ hgforest.sh”并将“ –pull”添加到“ hg clone”的每次调用中。

    而且即使添加“ -pull”后仍然失败,嗯……只要放弃并手动运行以下命令:

    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/corba corba
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/hotspot hotspot
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jaxp jaxp
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jaxws jaxws
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/jdk jdk
    hg clone --verbose --pull http://hg.openjdk.java.net/jdk7u/jdk7u/langtools langtools

    希望现在您有资源并且可以有所帮助:)

  8. Build需要一些外部二进制文件和一个可在Windows下运行的'make.exe'版本。 cygwin随附的'make'并没有真正起作用,因为路径名中的驱动器字母存在一些问题。

    接下来是我们需要编译几个文件。 一种是“ make.exe”的固定版本。 另一个是FreeType库,仅可作为源下载。

    如果您不希望编译所有这些东西,而只想轻松编译JDK,则建议从此处下载二进制文件(这是我的云端硬盘)。 将“ make.exe”解压缩到“ openjdk7 / bin”中。 请注意,该软件包中的“ make.exe”非常老,需要cygintl-3.dll,当前cygwin并未提供。 要修复此问题,只需复制cygintl-8.dll-> cygintl-3.dll。
    Freetype lib和dll必须放在ALT_FREETYPE_LIB_PATH conf变量引用的文件夹中(请参阅步骤13)。 另外,仍然需要一些Freetype标头,并通过make通过ALT_FREETYPE_HEADERS_PATH变量找到它们(请参见步骤13)。 这意味着您还需要下载源代码。

    如果您不是在寻找简单的解决方案,而是想自己编译这些二进制文件,请按照以下说明进行操作:

    1. 从这里下载make 3.82并解压缩。 找到“ config.h.W32”并取消注释行,定义为“ HAVE_CYGWIN_SHELL”。 在Visual Studio中打开make_msvc_net2003.sln解决方案,选择“发布”配置并进行构建。 在“发布”文件夹中,您将获得“ make_msvc.net2003.exe”,并将其重命名为“ make.exe”。
    2. 现在编译FreeType:
      1. 从此处下载FreeType v.2.4.7的源。
      2. 将其解压缩到某个位置,然后在Visual Studio中打开“ \ builds \ win32 \ vc2010 \ freetype.sln”。
      3. 转到项目属性(在项目树中的项目上单击鼠标右键),然后在“配置属性/常规/配置类型”中选择“动态库(.ddl)”,然后将输出重命名为“ freetype”。
      4. 更新ftoption.h,添加以下两行:
        #定义FT_EXPORT(x)__declspec(dllexport)x
        #定义FT_BASE(x)__declspec(dllexport)x
      5. 进行构建,您将在objs \ win32 \ vc2010中获得dll和lib。
      6. 不要忘记为“ ALT_FREETYPE_LIB_PATH”和“ ALT_FREETYPE_HEADERS_PATH”变量分配适当的值(请参阅步骤13)。
  9. 我在javadoc生成方面遇到了一些问题,但由于OutOfMemory失败。 为了修复它,我不得不更改“ openjdk7 \ jdk \ make \ docs \ Makefile”。
    这段代码:
    ifeq ($(ARCH_DATA_MODEL),64)MAX_VM_MEMORY = 1024
    else ifeq ($(ARCH),universal)MAX_VM_MEMORY = 1024
    elseMAX_VM_MEMORY = 512
    endif

    必须用以下内容替换:

    ifeq ($(ARCH_DATA_MODEL),64)MAX_VM_MEMORY = 1024
    else ifeq ($(ARCH),universal)MAX_VM_MEMORY = 1024
    elseMAX_VM_MEMORY = 1024
    endif
  10. 复制“ msvcr100.dll”到以下目录:
    cp /cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 10.0/Common7/Packages/Debugger/X64/msvcr100.dll ./drops/
  11. 确保Windows之前的cygwin的“ find.exe”在PATH中。 最简单的方法是将其复制到“ openjdk7 / bin”,然后在当前PATH的开头进行设置。
  12. 创建一个类似于以下文件的批处理文件。 不要忘记适当地更新路径:
    ALT_BOOTDIR=C:/Stuff/java_libs/jdk1.6.0_25
    ANT_HOME=C:/Stuff/java_libs/apache-ant-1.8.2
    JAVA_HOME=
    CLASSPATH=
    PATH=C:/Stuff/openjdk7/bin;%PATH%
    ALLOW_DOWNLOADS=true
    ALT_MSVCRNN_DLL_PATH=C:/Stuff/java_libs/openjdk7/dropsC:\WINDOWS\system32\cmd.exe /E:ON /V:ON /K 'C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd' /Release /xp /x86
  13. 运行批处理文件。 现在,您已经完全配置了环境,可以开始构建了。 运行“ bash”,然后在shell中执行“ make”:
    make ARCH_DATA_MODEL=32 ALT_OUTPUTDIR=C:/Users/Stas/Stuff/java_libs/openjdk7/output_32 ALT_FREETYPE_LIB_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-2.4.7/objs/win32/vc2010 ALT_FREETYPE_HEADERS_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-2.4.7/include ALT_BOOTDIR=C:/Users/Stas/Stuff/java_libs/jdk1.6.0_25 ALT_DROPS_DIR=c:/OpenJDK/ALT_DROPS_DIR ALT_DROPS_DIR=C:/Users/Stas/Stuff/java_libs/openjdk7/drops HOTSPOT_BUILD_JOBS=4 PARALLEL_COMPILE_JOBS=4 2>&1 | tee C:/Stuff/java_libs/openjdk7/output_32.log

    这将开始构建32位JDK。

  14. 喝咖啡,茶或您想要的任何东西,然后大约一个小时后,您应该会看到类似以下的内容:
    #-- Build times ----------
    Target all_product_build
    Start 2012-09-01 23:08:55
    End   2012-09-01 23:55:48
    00:02:35 corba
    00:06:46 hotspot
    00:00:30 jaxp
    00:00:51 jaxws
    00:35:30 jdk
    00:00:37 langtools
    00:46:53 TOTAL
    -------------------------

参考:来自Stas博客博客的JCG合作伙伴 Stanislav Kobylansky在Windows上构建OpenJDK 。


翻译自: https://www.javacodegeeks.com/2012/09/stass-blog-building-openjdk-on-windows.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity中怎么在InspectorI面板加LOGO

转载于:https://www.cnblogs.com/unitySPK/p/7278925.html

oracle stream 主键,oracle stream配置向导

1. Stream 的工作原理Stream 是Oracle Advanced Queue技术的一种扩展应用&#xff0c;这种技术最基本的原理就是收集事件&#xff0c;把时间保存在队列中&#xff0c;然后把这些事件发布给不同的订阅者。从DBA的角度来说&#xff0c;就是把捕获Oracle数据库产生的Redo日志&…

JavaScriptDOM 十四. Event DOM的属性

1 <!DOCTYPE html>2 <html>3 <head>4 <title></title>5 <script type"text/javascript">6 7 /*8 1. --------------- Event DOM 事件DOM 用户交互 ------------------9 当事件发生时, 执行JS功能代码10 11 常用…

五、创建Bean的三种方式

五、创建Bean的三种方式转载于:https://www.cnblogs.com/ljiwej/p/7280614.html

重写到边缘–充分利用它! 在GlassFish上!

现代应用程序开发的一个重要主题是重写。 自从Java Server Faces引入和Java EE 6中新的轻量级编程模型以来&#xff0c;您一直在努力使用漂亮&#xff0c;简单&#xff0c;可添加书签的URL。 PrettyFaces很久以来就一直存在&#xff0c;即使它在3.3.3版本中可以说是成熟的&…

php yii框架路由,yii框架路由配置

首先要在服务器配置(httpd.conf)中开启重写模块#开启重写模块&#xff0c;将其前面的#去掉LoadModule rewrite_module modules/mod_rewrite.so#Directory中允许覆盖开启## Possible values for the Options directive are "None", "All",# or any combinat…

前端面试总结二

一、响应式和自适应的区别&#xff1a; 联系(相同点)&#xff1a; 响应式设计(responsive design)和自适应设计(adaptive design)都是用来解决网页在不同分辨率的屏幕和设备上展示的一项技术(或者说一种方法)。 区别&#xff1a; 响应式设计&#xff1a;通过CSS Media Queries(…

“Spring入门”教程系列

大家好&#xff0c; 我很高兴向您介绍“Spring入门”教程系列&#xff01; 这是一系列文章&#xff0c;最初由我们的JCG合作伙伴 Michal Vrtiak在vrtoonjava博客上撰写 。 本系列中将逐步创建一个时间表管理应用程序&#xff0c;并且每个教程都在前一个教程的基础上构建。 处…

【看番杂感】Clannad系列观后感(剧透慎入)

前言 之前看第一季时&#xff0c;弹幕里总有人在刷“写作cl&#xff0c;读作人生”。当时我想&#xff0c;盲目把一部催泪番上升到人生的高度&#xff0c;这未免有些武断&#xff0c;也是对作品本身的不尊重。当看完第二季的我蓦然回首&#xff0c;发现这才是最最贴切的评价&am…

oracle+tns+01106,TNS-01106:Listener using listener name already been started

最近在做HACMP双机互备切换测试的时候&#xff0c;发现一个问题&#xff1a;A节点的listener端口为1521 &#xff0c;B节点的listener端口为1522&#xff0c;为什么两个节点的监听要用不同的端口号&#xff1f;当时AB机使用不同端口是基于如下考虑&#xff1a;HACMP的切换数据库…

Centos7 开机显示 ERST: Failed to get Error Log Address Range” 导致无法开机解决方法

开机显示 ERST: Failed to get Error Log Address Range” 导致无法开机&#xff0c;也无法重新安装系统&#xff0c;解决方法&#xff1a;开机进入BIOS &#xff0c; 关闭ACPI选项即可正常开机 转载于:https://www.cnblogs.com/zhangjianghua/p/6376811.html

Spring MVC 3模板和Apache Tiles

对于任何Web应用程序而言&#xff0c;有效的设计考虑因素是使用模板引擎&#xff08;或工具&#xff09;&#xff0c;并且由于具有Spring的“可插拔”特性&#xff0c;因此集成模板机制&#xff08;例如Apache Tiles&#xff09;的确要容易得多。 在这篇简单的文章中&#xff0…

hihocoder1543 SCI表示法

题意&#xff1a;任何一个数可以表示为连续整数相加&#xff0c;问这些连续整数的最大长度 题解&#xff1a;假设左右是l,r,那么(lr)*(l-r1)/2就是这段序列的和&#xff0c;枚举2n的所有因子&#xff0c;找到最大的就可以了 我的做法是预处理前缀和&#xff0c;二分找到答案位置…

linux自动安装Java环境脚本,Linux 自动添加JAVA环境脚本

Linux 自动添加JAVA环境脚本1. 删除原有的JAVA环境变量配置### --------------delete old config -------------------- ###sed -i -e /JAVA_HOME/d -e /JRE/d /etc/profile删除包含JAVA_HME 、JRE的行2. 加入现有的JAVA环境变量配置### -------------- add new config ----…

辗转相除法的证明

辗转相除法的证明设两数为a、b(b&#xff1c;a)&#xff0c;求它们最大公约数的步骤如下&#xff1a;用b除a&#xff0c;得a&#xff1d;bq&#xff0b;r&#xff08;0≤r&#xff1c;b&#xff09;&#xff08;q是这个除法的商&#xff09;。若r0,则b是a和b的最大公约数。若r≠…

linux查看有几个终端命令,如何知道你在 Linux 里最常使用的几个命令?

不知道大家自接触 Linux 以来&#xff0c;都使用过哪些命令&#xff0c;其中最常用的命令是什么&#xff1f;我最常用的命令之一是 sudo &#xff0c;因为我每天都在使用它在 Linux 上安装、更新、删除软件包以及其它各种需要超级用户权限的操作。那么你知道你自己最经常使用的…

使用JUnit的ExpectedException和@Rule测试自定义异常

异常测试 为什么要测试异常流&#xff1f; 就像所有代码一样&#xff0c;测试覆盖率会在代码和应该生成的业务功能之间写一个合同&#xff0c;从而为您提供代码的有效文档 &#xff0c;以及增加的尽早且经常强调功能的功能。 我不会介绍测试的许多好处&#xff0c;而是只关注异…

线程的工具类(Exchange)

public class Exchanger<V>extends Object 可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法&#xff0c;与伙伴线程进行匹配&#xff0c;并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形…

js 判断浏览器是否64位

js判断是否64位 浏览器 navigator.userAgent.match(/x64/i); 转载于:https://www.cnblogs.com/fanlinglong/p/7298733.html

linux ss 软件,linux ss 网络状态工具

ss是Socket Statistics的缩写查看网络状态&#xff0c;经常用的命令&#xff1a; watch ss -lntss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信…