文档章节

Mac OSX 10.10 Yosemite编译OpenJDK 9

易水瑶
 易水瑶
发布于 2015/06/13 20:27
字数 1133
阅读 3807
收藏 34
点赞 1
评论 2


在Mac OSX 10.10系统上编译了下OpenJDK9,以下仅是个人安装记录,供参考。



  • 编译时间:2015-06-13

  • 系统版本:Mac OS X Yosemite 10.10.4

  • 编译OpenJDK版本:JDK 9

  • 相关软件版本:

        XCode版本:XCode6-Beat4    Version 6.0 (6A267n)

        JDK版本:1.8.0_45

        软件管理工具:brew

        Xquartz(X11):2.7.7



参考资料:



编译前期准备:

  • 大致了解官网系统要求:

https://wiki.openjdk.java.net/display/Build/Supported+Build+Platforms


  • 源码下载工具安装(此处采用Mercurial工具[OpenJDK的版本管控工具]从官网下载):

安装参考资料:

    http://openjdk.java.net/guide/repositories.html

    https://mercurial.selenic.com/wiki/Download#Mac_OS_X

本机安装脚本:

安装:

$ brew install mercurial


若link失败,则:

    

$ sudo brew link mercurial


验证版本不低于2.6.3:hg version

安装后版本3.0.2,改为官网下载安装3.4.1了


  • 安装ccache提高编译速度

$ brew search ccache        
$ brew install ccache


  • 安装freetype(编译时需要):

brew install freetype

安装失败,提示依赖的libpng无法下载。手工安装:

下载libpng最新版1.6.17(http://sourceforge.net/projects/libpng/files/)并解压:

$ pwd
$ cd ./libpng-1.6.17
$ ./configure --prefix=/usr/local/libpng-1.6.17
$ make
$ make install
$ cd /usr/local/
$ ln -s libpng-1.6.17 /usr/local/libpng
$ brew install freetype



  • 获取JDK源码:

$ mkdir OpenJDK9;cd OpenJDK9
$ hg clone  
$ cd dev
$ chmod u+x get_source.sh
$ ./get_source.sh



编译配置:

$  bash ./configure --help=short
$  bash ./configure --enable-debug --with-target-bits=64
...
====================================================
A new configuration has been successfully created in
OpenJDK9/jdk9/build/macosx-x86_64-normal-server-fastdebug
using configure arguments '--enable-debug --with-target-bits=64'.

Configuration summary:
* Debug level:    fastdebug
* HS debug level: fastdebug
* JDK variant:    normal
* JVM variants:   server
* OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64

Tools summary:
* Boot JDK:       java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)  (at /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home)
* Toolchain:      clang (clang/LLVM)
* C Compiler:     Version Apple LLVM version 6.0 (clang-600.0.41.2) (based on LLVM 3.5svn) Target: x86_64-apple-darwin14.4.0 Thread model: posix (at /usr/bin/clang)
* C++ Compiler:   Version Apple LLVM version 6.0 (clang-600.0.41.2) (based on LLVM 3.5svn) Target: x86_64-apple-darwin14.4.0 Thread model: posix (at /usr/bin/clang++)

Build performance summary:
* Cores to use:   2
* Memory limit:   4096 MB

编译:

$ make
...
OpenJDK9/jdk9/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m:387:29: error: sending 'id<NSApplicationDelegate>' to parameter of incompatible type 'id<NSFileManagerDelegate>' [-Werror]
        [NSApp setDelegate: applicationDelegate];
                            ^~~~~~~~~~~~~~~~~~~
/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h:109:47: note: passing argument to parameter 'delegate' here
@property (assign) id <NSFileManagerDelegate> delegate NS_AVAILABLE(10_5, 2_0);
                                              ^
1 error generated.
make[3]: *** [OpenJDK9/jdk9/build/macosx-x86_64-normal-server-fastdebug/support/native/java.desktop/libosxapp/NSApplicationAWT.o] Error 1
make[2]: *** [java.desktop-libs] Error 2
make[2]: *** Waiting for unfinished jobs....

解决办法如下或者替换XCode版本为6.3.2或者5.几的:

//OpenJDK9/jdk9/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m
//387行改成:
    if (NSApp != nil) {
        //[NSApp setDelegate: applicationDelegate];
        [(NSApplication*)NSApp setDelegate: applicationDelegate];

        if (applicationDelegate && qad) {
            [qad processQueuedEventsWithTargetDelegate: applicationDelegate];
            qad = nil;
        }
    }


重新编译:

$ make clean
$ make
...
OpenJDK9/jdk9/jdk/src/java.desktop/share/native/libawt/awt/image/awt_parseImage.c:855:33: error: comparison of array 'rasterP->sppsm.offsets' not equal to a null pointer is always true [-Werror,-Wtautological-pointer-compare]
        else if (rasterP->sppsm.offsets != NULL) {
                 ~~~~~~~~~~~~~~~^~~~~~~    ~~~~
1 error generated.
make[3]: *** [OpenJDK9/jdk9/build/macosx-x86_64-normal-server-fastdebug/support/native/java.desktop/libawt/awt_parseImage.o] Error 1
make[2]: *** [java.desktop-libs] Error 2
make[2]: *** Waiting for unfinished jobs....

ERROR: Build failed for target 'default' in configuration 'macosx-x86_64-normal-server-fastdebug' (exit code 2) 
Hint: If caused by a warning, try configure --disable-warnings-as-errors 

make[1]: *** [main] Error 2
make: *** [default] Error 2

解决办法:

//OpenJDK9/jdk9/jdk/src/java.desktop/share/native/libawt/awt/image/awt_parseImage.c
//855行改成如下的(注释掉IF条件):
    else /** if (rasterP->sppsm.offsets != NULL) **/ {


再重新编译:

$ make clean
$ make
...
1 error generated.
make[3]: *** [OpenJDK9/jdk9/build/macosx-x86_64-normal-server-fastdebug/support/native/java.desktop/libsplashscreen/splashscreen_sys.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [java.desktop-libs] Error 2

ERROR: Build failed for target 'default' in configuration 'macosx-x86_64-normal-server-fastdebug' (exit code 2) 
Hint: If caused by a warning, try configure --disable-warnings-as-errors 

make[1]: *** [main] Error 2
make: *** [default] Error 2

解决办法:

//OpenJDK/openJDK9/jdk9/jdk/src/java.desktop/macosx/native/libsplashscreen/splashscreen_sys.m
//注释掉278行:
//[image setScalesWhenResized:YES];


再编,没出现错误了:

$ make clean
$ make
...
Finished building target 'default' in configuration 'macosx-x86_64-normal-server-fastdebug'



  • 编译结果初步验证:

$ cd ./build/*
$ ls
Makefile		configure-support	jdk
bootcycle-spec.gmk	configure.log		make-support
build.log		configure.log.old	spec.gmk
build.log.old		hotspot			support
buildtools		hotspot-spec.gmk
compare.sh		images
$ cd jdk/bin
$ ./java -versionopen
openjdk version "1.9.0-internal-fastdebug"
OpenJDK Runtime Environment (build 1.9.0-internal-fastdebug-stxpons_2015_06_13_16_14-b00)
OpenJDK 64-Bit Server VM (build 1.9.0-internal-fastdebug-stxpons_2015_06_13_16_14-b00, mixed mode)
  • 参考JDK源码目录下README-builds.html文件里的Testing章节:

    哎呀妈啊,都折腾半天了,还来啊,要先安装jtreg,懒得折腾了。。。下回有空再按官方方法验证。。。

$ cd test
$ make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all
/Applications/Xcode.app/Contents/Developer/usr/bin/make -k -C  ../jdk/test  TEST=jdk_all jdk_all
echo "Running tests: jdk_all"
Running tests: jdk_all
for each in jdk_all; do \
        /Applications/Xcode.app/Contents/Developer/usr/bin/make -j 1 TEST_SELECTION=":$each" UNIQUE_DIR=$each jtreg_tests; \
done
make[2]: *** No rule to make target `OpenJDK9/jdk9/test/../build/macosx-x86_64-normal-server-fastdebug/images/j2sdk-image', needed by `jtreg_tests'.
make[2]: *** No rule to make target `/java/re/jtreg/4.1/promoted/latest/binaries/jtreg', needed by `/java/re/jtreg/4.1/promoted/latest/binaries/jtreg/bin/jtreg'.
make[2]: Target `jtreg_tests' not remade because of errors.
make[1]: *** [jdk_all] Error 2
make: *** [jdk_all] Error 2



© 著作权归作者所有

共有 人打赏支持
易水瑶
粉丝 0
博文 1
码字总数 1133
作品 0
厦门
高级程序员
加载中

评论(2)

易水瑶
易水瑶

引用来自“freshghost”的评论

请问在hg clone 后面是的什么?我用hg clone http://hg.openjdk.java.net/jdk9/jdk9 OpenJKD9但是出现以下错误
abort: stream ended unexpectedly (got 113888 bytes, expected 205870)
hg clone http://hg.openjdk.java.net/jdk9/dev
f
freshghost
请问在hg clone 后面是的什么?我用hg clone http://hg.openjdk.java.net/jdk9/jdk9 OpenJKD9但是出现以下错误
abort: stream ended unexpectedly (got 113888 bytes, expected 205870)
自己动手,在macOS High Sierra中编译一个可debug的JDK

背景 由于最近想分析几个方法,所以需要手头有一个可以的,因此,这两天折腾了折腾,踩了10+个坑,看了10+篇文章,尝试了10+次,最后总算把给编出来了,当在自己编译出来的上运行输出了那熟悉...

since1986 ⋅ 01/30 ⋅ 0

Chrome弹窗提示Virus Found

系统为Mac OSX Yosemite,浏览器为Google chrome,图片为历史记录里当时的链接 在bing搜索页面点进了一个链接后跳转的。这代表什么呢?

河溪 ⋅ 06/06 ⋅ 0

Python 2.7.15 发布,bug 修复版本

Python 2.7.15 发布,此版本是 Python 2.7 系列的 bug 修复版本。 macOS 用户需要关注一下,从2.7.15版本开始,所有 python.org macOS 安装程序都附带了 OpenSSL 的内置副本。此外,还有一个...

雨田桑 ⋅ 05/03 ⋅ 0

丁伟强/WizQTClient

WizNote for Mac/Linux cross-platform cloud based note-taking client WizNote is an open-sourced project, published under GPLv3 for individual/personal users and custom commercial......

丁伟强 ⋅ 04/19 ⋅ 0

苹果宣布将在 2019 年推出 iOS 和 macOS 跨平台功能

苹果 macOS 和 iOS 设备在功能方面越来越接近,现在苹果正在缩小这一差距。在昨天的 WWDC 开发者大会上,苹果表示不会将 iOS 和 macOS 进行合并,而是让 iOS 应用移植到 macOS 上变得更加简单...

王练 ⋅ 06/05 ⋅ 1

Mac下SSH连接远程服务器一段时间后X11报错

问题描述:在MacOS中用ssh -X连接远程服务器,刚开始时X11转播正常,能正常开启图像界面,如用ipython画图之类的。但一段时间后当需要再次开启某个图像界面时报错: 此时需要断开当前ssh连接...

Lynn_AIR ⋅ 06/03 ⋅ 0

WebKit 继续泄密,macOS 10.14 将支持深色模式

今天早些时候,根据 WebKit 的代码我们发现,iOS 12 可能会继续支持 iPhone 5s。现在,又有国外的朋友在 WebKit 代码中发现了其他信息。首先,我们了解下 WebKit 到底是什么。Webkit 是一种渲...

达尔文 ⋅ 04/21 ⋅ 0

Krita 4.0.4 正式发布,开源数字绘画软件

Krita 开发小组在今天正式发布 Krita 4.0.4 版,这是 Krita 4.0.0 的一个问题修正版本,也是该系列的最后一次维护性更新。 Krita 的中文翻译在这一版得到了大幅更新,但是少数字符串因为在源...

TysonTan ⋅ 06/14 ⋅ 0

iTerm2 发布 3.1.6 版本,MacOS 终端模拟器

iTerm2 已发布 3.1.6 版本,这是一款用于 macOS 的终端模拟器。 iTerm2 是 iTerm 的后继者,也是 Terminal 的替代者。支持窗口分割、热键、搜索、自动补齐、无鼠标复制、历史粘贴、即时重播等...

王练 ⋅ 04/25 ⋅ 3

苹果弃用 OpenCL 和 OpenGL ,OpenCL 或遭全面淘汰

随着昨天 MacOS 10.14 Mojave 的发布,苹果悄然证实,他们已弃用 OpenGL 和 OpenCL 。 在 MacOS 10.14 的更新文档中,苹果表示使用 OpenGL 和 OpenCL 构建的应用可以继续在 macOS 10.14 中运...

王练 ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部