- 浏览: 3049364 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
上周末在JavaEye问答频道看到这样一个问题:JVM源码编译
于是回答一下…
背景知识
这年头想从JRL源码来构建JDK的应该不多了吧。毕竟Sun(-> Oracle)的JDK开源源码的主流早已是OpenJDK。
如果要尝试构建基于Sun源码的JDK,强烈建议优先考虑OpenJDK。选择它有诸多好处:
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;
(代码上最主要的差异是在原本JDK依赖的第三方库上,包括加密库、音频库、字体等。核心部分,也就是HotSpot VM与Java核心库基本上保持了Sun JDK的原貌,甚至还比Sun JDK更快的吸收社区反馈的贡献)
2、它是真正开源的,许可证是GPLv2+CE,使用上比原本JDK的另外两种许可证要自由一些;
3、由于考虑到社区的开发者的build环境需求,OpenJDK的构建系统比原本的JDK有大幅改进,使整个build过程变得非常轻松。
如果要构建OpenJDK 6,参考OpenJDK 6 Build README即可。
在Ubuntu或其他Debian系的Linux上只要靠aptitude build-dep openjdk-6就能抓到大部分需要的依赖包,相当轻松。
(注:没有aptitude的话把上面的代码改为用apt-get就行
另外,实际build的时候发觉如果JAXP和JAXWS出问题的话只要再多来个export ALLOW_DOWNLOADS=true就好了。
OpenJDK6 build 20及之前的版本的CORBA要build起来可能有点麻烦,没用到的话直接BUILD_CORBA=false吧。另外现在java.net迁移了之后,这些版本里jaxp.properties和jaxwa.properties里的下载地址不对了,要修正)
在OpenJDK之外,Sun确实也有以别的许可证形式提供JDK的源码。
其中一种是Sun Community Source License (SCSL)。这与微软在公布其.NET的虚拟机CLR的部分实现——SSCLI所使用的许可证有相似之处。Sun从1998年12月开始就通过SCSL许可证公布了许多产品的源码,包括全线JDK源码,一直到JDK 5.0。
SCSL的可操作性一直受到社区的诟病,所以从JDK 5.0开始,Sun开始使用一种新的许可证,Java Research License (JRL)来公布其源码,主要用于面向研究人员提供JDK源码。
由于这两种许可证的使用限制都比较大,并不是真正意义上的“开源”(大写的Open Source),所以在OpenJDK出来之后,以这两种许可证公布的源码已经越来越不受关注。
根据上个月的一则新闻,Retiring JDK Source Code Bundles Under JRL,以后Oracle JDK将不会再以JRL许可证发布源码,只保留以GPLv2+CE许可证发布OpenJDK源码。
更新(2011-02-04):几天前刚出的JDK6u25 build 01的源码果然就没有继续以JRL许可证公开发布了。
但既然写了这一帖,肯定还是有人想直接拿JRL许可证公布的Sun JDK源码来build的。就让我们来看看要build出其中的大部分需要怎样的环境,要做哪些事情吧。
参考文档
·README: JDK Builds (JDK v6u23 fcs)
·Kelly O'Hair: JDK6 Build Cheat Sheet
·Noniko's Weblog: Solaris - maybe the easiest environment to build JDK (重点在帖后Kelly O'Hair的回复中)
有篇老文虽然没参考上不过还是把链接记下来吧:
Cay Horstmann: Honey, I built the JDK! (on Ubuntu)
另外,同事大仁先前也询问过build JDK的事。他build的是OpenJDK 7,笔记在这里:
Ubuntu10.04下build OpenJDK7 的过程
构建的目标
本帖要build出来的内容主要为研究、开发目的服务,而不用于再发布。因此不把整个Sun JDK里的所有源码都build掉,可以避开一下非常麻烦的东西。
要build出来的部分包括:
·功能完整的HotSpot VM(libjvm.so等)
·功能完整的Java核心类库(rt.jar等)
·功能完整的JDK内建工具及其启动程序(j2sdk-image/bin目录里的)
·由上述组件构成的JRE、JDK映像
·上述项目的product build及fastdebug build
不包括:
·JAXP
·JAXWS
·浏览器Java插件
·VisualVM
·JDK或JRE的安装包
获取源码
要获取Oracle JDK的最新源码,可以在官网Java SE Downloads页面找到“Java SE 6 JDK Source Code”的一栏,点击“Downlaod”链接即可跳转到当前JDK版本的源码下载页。
2012-06更新:这个链接已经无法下载到JRL许可证的JDK 6源码。下面也是。
本帖需要下载的包是这两个:
·JDK 6u23 Source under the JRL license
jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar
·JDK Binaries for Source Build 6u23
jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar
(顺带一提,FCS的意思是Final Customer Shipment
如果想下载较早版本的JDK6源码,可以在Java™ Platform, Standard Edition 6 Snapshot Releases Archive页面找到源码下载页的列表。
2012-06更新:同上,这个链接也已经无法下载到JRL许可证的JDK 6源码。
再次提醒注意:这些源码都是以Java Research License (JRL)公布的,请确认自己的需求在许可证允许的范围内。
配置环境
我的主系统现在是Ubuntu 10.10 x86_64,不过上面已经装了很多开发包,到底哪些是用来build JDK的我也不记得了。所以这次装了VirtualBox 4,在上面装了个干净的XUbuntu 10.10 x86专门用来实验。
本帖描述的build环境适用于当前主流版本的Ubuntu、XUbuntu和KUbuntu,也应该适用于许多Debian系Linux。RPM系Linux需要自己找对应的软件包了。
从干净的XUbuntu安装开始,到最终能完成一次generic debug build,过程中安装了下列软件包:
一口气用apt-get把它们都装上就好了:
虽然我没通过apt-get显式安装binutils,但确认了这系统实际上有装过,如果build过程中有意外的错误的话请安装binutils:
其中,
build-essential gawk m4 binutils:
这些是Linux上的一些基本工具,build许多东西都需要它们。build-essential主要用来装g++(GNU C++编译器)及C++标准库;gawk是GNU版awk,用来做文本操作;m4是一种模板语言,AWT的DebugHelper依赖它来生成部分源码;binutils主要是链接器、汇编器、反汇编器之类的。
openjdk-6-jdk:
要build JDK,需要先安装一个启动用的JDK(“Bootstrap JDK”)。apt-get默认将它安装在/usr/lib/jvm/java-6-openjdk。build的时候要把ALT_BOOTDIR设置到它的安装目录上。这里装Sun JDK来做Bootstrap JDK也行。
libasound2-dev:
这是Advanced Linux Sound Architecture (ALSA)相关的依赖。
libcups2-dev:
这是Common UNIX Printing System (CUPS)相关的依赖。
libxrender-dev xorg-dev xutils-dev x11proto-print-dev:
这些全部都是X相关的依赖,主要是为了build出AWT的部分才会需要的。这部分依赖非常非常蛋疼。在安装完依赖后,还得造个符号链接,把/usr/lib映射为/usr/X11R6的别名,这样build过程才能正确找到X11的头文件:
开始build
准备源码
在真正开始build之前,先把先前下载到的两个包,jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar 与 jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar 解压到同一目录下,确保该目录有读写权限,并确认该目录有4G以上的剩余空间可用。
本帖中源码包是解压到/media/JDK6_build_area/jdk6u23目录中的。
为了解决一个缺少符号的问题,要在解压出来的源码目录里,找到j2se/src/solaris/native/sun/awt/awt_GraphicsEnv.c,第965行:
将X_ShmAttach改为1,变成:
设置环境变量
本帖描述的build过程中需要设置的环境变量只有一个,
如果环境中已经设置了JAVA_HOME的话,要将该环境变量去掉,否做build过程中会有诡异的事情发生:
检查编译环境的正确性
进入到解压后源码包的control/make目录中,用make dev-sanity命令即可。该命令后面要带上一些环境参数,完整如下
检查过程中输出的日志请见本帖附录。简单介绍其中几个参数的含义:
dev(或者DEV_ONLY):
把它设置为true可以让另外三个变量也变为true:SKIP_COMPARE_IMAGES、BUILD_INSTALL、NO_DOCS。
BUILD_DEPLOY:
把它设置为false可以避开javaws和浏览器Java插件之类的部分的build。
BUILD_INSTALL:
把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
SKIP_COMPARE_IMAGES:
比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。
ALT_BOOTDIR:
Bootstrap JDK的安装路径。必须设置。
ALT_DEVTOOLS_PATH:
zip和unzip工具所在的路径。必须设置。
HOTSPOT_BUILD_JOBS:
这个变量主要是设置build HotSpot的过程的并发程度。基本上设到跟CPU的核数一样多没什么问题吧。这个参数不设也没关系。
ALT_JDK_IMPORT_PATH:
这个变量不用设置。因为要build的JDK足够完整,缺少的部分我们都不需要。
正式开始build
环境设置好之后,剩下就没啥问题了。在解压出来的源码包的control/make目录里连续执行两次下述命令即可。后一次时间会比较长,中间做点什么别的事吧,别傻等哦
为什么要连续执行两次呢?反正在本帖的环境里,源码包中所包含的Motif是没办法一次过顺利build出来的。第一执行上面的命令后,会看到类似这样的错误:
但其实没关系,无视它,再执行一次同样的命令,就build过去了。
Build正确完成后,最后应该可以看到类似下面的提示信息:
然后到build出来的JDK映像的bin目录里去看看的话,
到此,我们自己build出来的Sun(-> Oracle) JDK就到手了。然后随便改改代码、调试来玩玩吧
看,build出来的JDK里的JConsole运行也是正常的哦,前面libXm.a的那个错误不是大问题:
附录
make dev-sanity的命令及输出结果:(超出显示范围的部分请复制下来看吧)
apt-get install过的包及其传递依赖:
====================================================================
2011-08-07追记
刚build了一个最新的hotspot-comp出来,顺便加到这帖里。
源码地址:
要先装上Mercurial来抓源码。然后build之前要确定装了Ant。
下好源码后
如果jaxp和jaxwa的build出错的话在它们各自的build.properties文件里加上allow.downloads=true
jdk目录build的时候在javadoc上出了点问题,所以把jdk/make/Makefile里的docs整个注释掉了
64-bit: ARCH_DATA_MODEL=64
Charles Nutter's build script: https://gist.github.com/1148321
https://blogs.oracle.com/kto/entry/faster_openjdk_build_tricks
make sure this symlink is live: ~/java/re/j2se/1.8.0/promoted/latest/binaries/linux-amd64 -> some valid JDK8 installation
$ ln -s -T ~/sdk/jdk1.8.0 linux-amd64
在64位Ubuntu上构建32位HotSpot VM的话,
ARCH_DATA_MODEL=32
可能需要额外装 ia32-libs libc6-dev-i386 lib32stdc++6 g++-multilib 等
请看这帖了解OpenJDK的一些历史,以及open和closed版直接的关系:http://rednaxelafx.iteye.com/blog/1549577
然后看这帖来了解OpenJDK与Oracle JDK的版本对应关系:https://gist.github.com/rednaxelafx/925323
然后,所有带有“JRL”字样的源码包都不是OpenJDK而是以Java Research License发布的闭源版JDK的源码。有src字样的是源码包,没src字样的是编译好的二进制发布文件。
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
上个问题解决后,又报来下面的错误,不太清除错误内容,请帮忙看一下,多谢!
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
前面肯定还有什么别的错误信息才对。
话说我不是特别明白build起来这么困难为什么一定要弄…请问是需要修改里面的源码么?如果不需要build出AWT之类的那些东西可以想办法跳过去的。
这个问题解决了,是没有安装imake,我google了一把
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
上个问题解决后,又报来下面的错误,不太清除错误内容,请帮忙看一下,多谢!
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
前面肯定还有什么别的错误信息才对。
话说我不是特别明白build起来这么困难为什么一定要弄…请问是需要修改里面的源码么?如果不需要build出AWT之类的那些东西可以想办法跳过去的。
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
上个问题解决后,又报来下面的错误,不太清除错误内容,请帮忙看一下,多谢!
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
呃呵呵,IA-64上的问题我就没办法帮忙了,没这么高端的装备啊
看起来像是ad文件里有问题。但实际是什么问题我看不出来…
呵呵 高端装备折磨死我了,谢谢啦O(∩_∩)O~
呃呵呵,IA-64上的问题我就没办法帮忙了,没这么高端的装备啊
看起来像是ad文件里有问题。但实际是什么问题我看不出来…
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
你在解压源码JAR的时候一定要有X支持的图形界面,否则它就无法解压。例如说如果你简单的通告ssh连接到远程服务器去做这个解压就会失败,因为那样连接只要字符界面而没有图形界面。
貌似有个设置display的,设置了ssh就可以做这样的事了。
你在解压源码JAR的时候一定要有X支持的图形界面,否则它就无法解压。例如说如果你简单的通告ssh连接到远程服务器去做这个解压就会失败,因为那样连接只要字符界面而没有图形界面。
快了…吧。你机器太慢了,哈哈。我在服务器上build的时候貌似是十来分钟build完的。
平时工作我都只build出HotSpot VM,这就很快,在我的笔记本上干净的build一次不超过4分钟。一般小量修改代码再build只要十几秒就好了。
liueye 写道
请问有谁在Linux环境编译过SUN JVM,请提供编译手顺,谢谢
于是回答一下…
背景知识
这年头想从JRL源码来构建JDK的应该不多了吧。毕竟Sun(-> Oracle)的JDK开源源码的主流早已是OpenJDK。
如果要尝试构建基于Sun源码的JDK,强烈建议优先考虑OpenJDK。选择它有诸多好处:
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;
(代码上最主要的差异是在原本JDK依赖的第三方库上,包括加密库、音频库、字体等。核心部分,也就是HotSpot VM与Java核心库基本上保持了Sun JDK的原貌,甚至还比Sun JDK更快的吸收社区反馈的贡献)
2、它是真正开源的,许可证是GPLv2+CE,使用上比原本JDK的另外两种许可证要自由一些;
3、由于考虑到社区的开发者的build环境需求,OpenJDK的构建系统比原本的JDK有大幅改进,使整个build过程变得非常轻松。
如果要构建OpenJDK 6,参考OpenJDK 6 Build README即可。
在Ubuntu或其他Debian系的Linux上只要靠aptitude build-dep openjdk-6就能抓到大部分需要的依赖包,相当轻松。
OpenJDK 6 Build README 写道
After installing Ubuntu 9.04 you need to install several build dependencies. The simplest way to do it is to execute the following commands:
In addition, it's necessary to set a few environment variables for the build:
Then, calling make in the top level OpenJDK source code directory with the following parameters results in a working build:
sudo aptitude build-dep openjdk-6 sudo aptitude install openjdk-6-jdk gcc-4.2 g++-4.2 sudo aptitude install libmotif-dev
In addition, it's necessary to set a few environment variables for the build:
export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk
Then, calling make in the top level OpenJDK source code directory with the following parameters results in a working build:
make all CC=gcc-4.2 CPP=g++-4.2
(注:没有aptitude的话把上面的代码改为用apt-get就行
另外,实际build的时候发觉如果JAXP和JAXWS出问题的话只要再多来个export ALLOW_DOWNLOADS=true就好了。
OpenJDK6 build 20及之前的版本的CORBA要build起来可能有点麻烦,没用到的话直接BUILD_CORBA=false吧。另外现在java.net迁移了之后,这些版本里jaxp.properties和jaxwa.properties里的下载地址不对了,要修正)
在OpenJDK之外,Sun确实也有以别的许可证形式提供JDK的源码。
其中一种是Sun Community Source License (SCSL)。这与微软在公布其.NET的虚拟机CLR的部分实现——SSCLI所使用的许可证有相似之处。Sun从1998年12月开始就通过SCSL许可证公布了许多产品的源码,包括全线JDK源码,一直到JDK 5.0。
SCSL的可操作性一直受到社区的诟病,所以从JDK 5.0开始,Sun开始使用一种新的许可证,Java Research License (JRL)来公布其源码,主要用于面向研究人员提供JDK源码。
由于这两种许可证的使用限制都比较大,并不是真正意义上的“开源”(大写的Open Source),所以在OpenJDK出来之后,以这两种许可证公布的源码已经越来越不受关注。
根据上个月的一则新闻,Retiring JDK Source Code Bundles Under JRL,以后Oracle JDK将不会再以JRL许可证发布源码,只保留以GPLv2+CE许可证发布OpenJDK源码。
更新(2011-02-04):几天前刚出的JDK6u25 build 01的源码果然就没有继续以JRL许可证公开发布了。
但既然写了这一帖,肯定还是有人想直接拿JRL许可证公布的Sun JDK源码来build的。就让我们来看看要build出其中的大部分需要怎样的环境,要做哪些事情吧。
参考文档
·README: JDK Builds (JDK v6u23 fcs)
·Kelly O'Hair: JDK6 Build Cheat Sheet
·Noniko's Weblog: Solaris - maybe the easiest environment to build JDK (重点在帖后Kelly O'Hair的回复中)
有篇老文虽然没参考上不过还是把链接记下来吧:
Cay Horstmann: Honey, I built the JDK! (on Ubuntu)
另外,同事大仁先前也询问过build JDK的事。他build的是OpenJDK 7,笔记在这里:
Ubuntu10.04下build OpenJDK7 的过程
构建的目标
本帖要build出来的内容主要为研究、开发目的服务,而不用于再发布。因此不把整个Sun JDK里的所有源码都build掉,可以避开一下非常麻烦的东西。
要build出来的部分包括:
·功能完整的HotSpot VM(libjvm.so等)
·功能完整的Java核心类库(rt.jar等)
·功能完整的JDK内建工具及其启动程序(j2sdk-image/bin目录里的)
引用
appletviewer javac jhat jstat rmic unpack200 apt javadoc jinfo jstatd rmid wsgen extcheck javah jmap keytool rmiregistry wsimport idlj javap jps native2ascii schemagen xjc jar java-rmi.cgi jrunscript orbd serialver jarsigner jconsole jsadebugd pack200 servertool java jdb jstack policytool tnameserv
·由上述组件构成的JRE、JDK映像
·上述项目的product build及fastdebug build
不包括:
·JAXP
·JAXWS
·浏览器Java插件
·VisualVM
·JDK或JRE的安装包
获取源码
要获取Oracle JDK的最新源码,可以在官网Java SE Downloads页面找到“Java SE 6 JDK Source Code”的一栏,点击“Downlaod”链接即可跳转到当前JDK版本的源码下载页。
2012-06更新:这个链接已经无法下载到JRL许可证的JDK 6源码。下面也是。
本帖需要下载的包是这两个:
·JDK 6u23 Source under the JRL license
jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar
·JDK Binaries for Source Build 6u23
jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar
(顺带一提,FCS的意思是Final Customer Shipment
引用
FCS (Final Customer Shipment)
the stage at which a product has completed the beta-testing phase and is available to be shipped to customers
)
the stage at which a product has completed the beta-testing phase and is available to be shipped to customers
如果想下载较早版本的JDK6源码,可以在Java™ Platform, Standard Edition 6 Snapshot Releases Archive页面找到源码下载页的列表。
2012-06更新:同上,这个链接也已经无法下载到JRL许可证的JDK 6源码。
再次提醒注意:这些源码都是以Java Research License (JRL)公布的,请确认自己的需求在许可证允许的范围内。
配置环境
我的主系统现在是Ubuntu 10.10 x86_64,不过上面已经装了很多开发包,到底哪些是用来build JDK的我也不记得了。所以这次装了VirtualBox 4,在上面装了个干净的XUbuntu 10.10 x86专门用来实验。
本帖描述的build环境适用于当前主流版本的Ubuntu、XUbuntu和KUbuntu,也应该适用于许多Debian系Linux。RPM系Linux需要自己找对应的软件包了。
从干净的XUbuntu安装开始,到最终能完成一次generic debug build,过程中安装了下列软件包:
引用
build-essential gawk m4 openjdk-6-jdk libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev
一口气用apt-get把它们都装上就好了:
引用
$ sudo apt-get install build-essential gawk m4 openjdk-6-jdk libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev
虽然我没通过apt-get显式安装binutils,但确认了这系统实际上有装过,如果build过程中有意外的错误的话请安装binutils:
引用
$ sudo apt-get install binutils
其中,
build-essential gawk m4 binutils:
这些是Linux上的一些基本工具,build许多东西都需要它们。build-essential主要用来装g++(GNU C++编译器)及C++标准库;gawk是GNU版awk,用来做文本操作;m4是一种模板语言,AWT的DebugHelper依赖它来生成部分源码;binutils主要是链接器、汇编器、反汇编器之类的。
openjdk-6-jdk:
要build JDK,需要先安装一个启动用的JDK(“Bootstrap JDK”)。apt-get默认将它安装在/usr/lib/jvm/java-6-openjdk。build的时候要把ALT_BOOTDIR设置到它的安装目录上。这里装Sun JDK来做Bootstrap JDK也行。
libasound2-dev:
这是Advanced Linux Sound Architecture (ALSA)相关的依赖。
libcups2-dev:
这是Common UNIX Printing System (CUPS)相关的依赖。
libxrender-dev xorg-dev xutils-dev x11proto-print-dev:
这些全部都是X相关的依赖,主要是为了build出AWT的部分才会需要的。这部分依赖非常非常蛋疼。在安装完依赖后,还得造个符号链接,把/usr/lib映射为/usr/X11R6的别名,这样build过程才能正确找到X11的头文件:
引用
$ sudo mkdir /usr/X11R6 $ cd /usr/X11R6/ $ sudo ln -s -T /usr/lib lib
开始build
准备源码
在真正开始build之前,先把先前下载到的两个包,jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar 与 jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar 解压到同一目录下,确保该目录有读写权限,并确认该目录有4G以上的剩余空间可用。
本帖中源码包是解压到/media/JDK6_build_area/jdk6u23目录中的。
为了解决一个缺少符号的问题,要在解压出来的源码目录里,找到j2se/src/solaris/native/sun/awt/awt_GraphicsEnv.c,第965行:
if (xerr->minor_code == X_ShmAttach) {
将X_ShmAttach改为1,变成:
if (xerr->minor_code == 1) {
设置环境变量
本帖描述的build过程中需要设置的环境变量只有一个,
引用
$ export LANG=C
如果环境中已经设置了JAVA_HOME的话,要将该环境变量去掉,否做build过程中会有诡异的事情发生:
引用
$ unset JAVA_HOME
检查编译环境的正确性
进入到解压后源码包的control/make目录中,用make dev-sanity命令即可。该命令后面要带上一些环境参数,完整如下
引用
$ make dev-sanity BUILD_DEPLOY=false SKIP_COMPARE_IMAGES=true ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk ALT_DEVTOOLS_PATH=/usr/bin HOTSPOT_BUILD_JOBS=2
检查过程中输出的日志请见本帖附录。简单介绍其中几个参数的含义:
dev(或者DEV_ONLY):
把它设置为true可以让另外三个变量也变为true:SKIP_COMPARE_IMAGES、BUILD_INSTALL、NO_DOCS。
BUILD_DEPLOY:
把它设置为false可以避开javaws和浏览器Java插件之类的部分的build。
BUILD_INSTALL:
把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
SKIP_COMPARE_IMAGES:
比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。
ALT_BOOTDIR:
Bootstrap JDK的安装路径。必须设置。
ALT_DEVTOOLS_PATH:
zip和unzip工具所在的路径。必须设置。
HOTSPOT_BUILD_JOBS:
这个变量主要是设置build HotSpot的过程的并发程度。基本上设到跟CPU的核数一样多没什么问题吧。这个参数不设也没关系。
ALT_JDK_IMPORT_PATH:
这个变量不用设置。因为要build的JDK足够完整,缺少的部分我们都不需要。
正式开始build
环境设置好之后,剩下就没啥问题了。在解压出来的源码包的control/make目录里连续执行两次下述命令即可。后一次时间会比较长,中间做点什么别的事吧,别傻等哦
引用
$ make dev BUILD_DEPLOY=false SKIP_COMPARE_IMAGES=true ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk ALT_DEVTOOLS_PATH=/usr/bin HOTSPOT_BUILD_JOBS=2
为什么要连续执行两次呢?反正在本帖的环境里,源码包中所包含的Motif是没办法一次过顺利build出来的。第一执行上面的命令后,会看到类似这样的错误:
引用
gcc: /media/JDK6_build_area/jdk6u23/control/build/linux-i586/motif-i586/lib/libXm.a: No such file or directory make[4]: *** [/media/JDK6_build_area/jdk6u23/control/build/linux-i586/lib/i386/motif21/libmawt.so] Error 1 make[4]: Leaving directory `/media/JDK6_build_area/jdk6u23/j2se/make/sun/motif21' make[3]: *** [all] Error 1 make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/j2se/make/sun' make[2]: *** [all] Error 1 make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/j2se/make' make[1]: *** [j2se-build] Error 2 make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make' make: *** [dev-build] Error 2
但其实没关系,无视它,再执行一次同样的命令,就build过去了。
Build正确完成后,最后应该可以看到类似下面的提示信息:
引用
generic_debug_build build finished: 11-01-16 03:11 make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make' Control workspace build finished: 11-01-16 03:11 make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
然后到build出来的JDK映像的bin目录里去看看的话,
引用
rednaxelafx@vbox:/media/JDK6_build_area/jdk6u23/control/make$ cd ../build/linux-i586/j2sdk-image/bin/ rednaxelafx@vbox:/media/JDK6_build_area/jdk6u23/control/build/linux-i586/j2sdk-image/bin$ ./java -version java version "1.6.0-internal" Java(TM) SE Runtime Environment (build 1.6.0-internal-rednaxelafx_16_jan_2011_02_10-b00) Java HotSpot(TM) Server VM (build 19.0-b09, mixed mode) rednaxelafx@vbox:/media/JDK6_build_area/jdk6u23/control/build/linux-i586/j2sdk-image/bin$ cd ../../j2sdk-debug-image/fastdebug/bin/ rednaxelafx@vbox:/media/JDK6_build_area/jdk6u23/control/build/linux-i586/j2sdk-debug-image/fastdebug/bin$ ./java -version java version "1.6.0-internal-fastdebug" Java(TM) SE Runtime Environment (build 1.6.0-internal-fastdebug-rednaxelafx_16_jan_2011_02_38-b00) Java HotSpot(TM) Server VM (build 19.0-b09-fastdebug, mixed mode)
到此,我们自己build出来的Sun(-> Oracle) JDK就到手了。然后随便改改代码、调试来玩玩吧
看,build出来的JDK里的JConsole运行也是正常的哦,前面libXm.a的那个错误不是大问题:
附录
make dev-sanity的命令及输出结果:(超出显示范围的部分请复制下来看吧)
引用
$ make dev-sanity BUILD_DEPLOY=false SKIP_COMPARE_IMAGES=true ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk ALT_DEVTOOLS_PATH=/usr/bin HOTSPOT_BUILD_JOBS=2 cd ../../control/make make sanity DEV_ONLY=true make[1]: Entering directory `/media/JDK6_build_area/jdk6u23/control/make' make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/j2se/make' make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/j2se/make' Build Machine Information: build machine = Build Directory Structure: CWD = /media/JDK6_build_area/jdk6u23/control/make TOPDIR = ../.. CONTROL_TOPDIR = ../../control HOTSPOT_TOPDIR = ../../hotspot J2SE_TOPDIR = ../../j2se MOTIF_TOPDIR = ../../motif Build Directives: BUILD_HOTSPOT = true BUILD_MOTIF = true BUILD_J2SE = true BUILD_DEPLOY = false BUILD_INSTALL = false Hotspot Settings: HOTSPOT_BUILD_JOBS = 2 HOTSPOT_OUTPUTDIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/outputdir HOTSPOT_EXPORT_PATH = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/import Bootstrap Settings: BOOTDIR = /usr/lib/jvm/java-6-openjdk ALT_BOOTDIR = /usr/lib/jvm/java-6-openjdk BOOT_VER = 1.6 [requires at least 1.6] MINIMUM_JDK_VERSION = 1.6.0 ALT_MINIMUM_JDK_VERSION = OUTPUTDIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586 ALT_OUTPUTDIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586 ABS_OUTPUTDIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586 Build Tool Settings: SLASH_JAVA = /java ALT_SLASH_JAVA = VARIANT = OPT JDK_DEVTOOLS_DIR = /java/devtools ALT_JDK_DEVTOOLS_DIR = UNIXCOMMAND_PATH = /bin/ ALT_UNIXCOMMAND_PATH = COMPILER_PATH = /usr/bin/ ALT_COMPILER_PATH = DEVTOOLS_PATH = /usr/bin/ ALT_DEVTOOLS_PATH = /usr/bin UNIXCCS_PATH = /usr/ccs/bin/ ALT_UNIXCCS_PATH = USRBIN_PATH = /usr/bin/ ALT_USRBIN_PATH = GCC29_COMPILER_PATH = /java/devtools/linux/gcc29/usr/ ALT_GCC29_COMPILER_PATH = MOTIF_DIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/motif-i586 ALT_MOTIF_DIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/motif-i586 COMPILER_NAME = GCC COMPILER_VERSION = CC_VER = 4.4 [requires at least 3.2] ZIP_VER = 3.0 [requires at least 2.2] UNZIP_VER = 6.00 [requires at least 5.12] PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games TEMPDIR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/tmp Build Directives: USE_ONLY_BOOTDIR_TOOLS = USE_HOTSPOT_INTERPRETER_MODE = PEDANTIC = DEV_ONLY = true J2RE_ONLY = NO_DOCS = NO_IMAGES = TOOLS_ONLY = INSANE = PARALLEL_COMPILES = true PARALLEL_COMPILE_JOBS = 2 ALT_PARALLEL_COMPILE_JOBS = FASTDEBUG = COMPILER_WARNINGS_FATAL = false COMPILER_WARNING_LEVEL = INCREMENTAL_BUILD = false CC_HIGHEST_OPT = -O3 CC_HIGHER_OPT = -O3 CC_LOWER_OPT = -O2 CXXFLAGS = -O2 -fPIC -DCC_NOEX -W -Wall -Wno-unused -Wno-parentheses CFLAGS = -O2 -fno-strict-aliasing -fPIC -W -Wall -Wno-unused -Wno-parentheses JAVA_BOOT = /usr/lib/jvm/java-6-openjdk/bin/java -client -Xmx512m -Xms256m JAVAC_BOOT = /usr/lib/jvm/java-6-openjdk/bin/javac -J-XX:ThreadStackSize=768 -J-client -J-Xmx512m -J-Xms256m -J-Xbootclasspath/p:./../make/sun/javac/javac/gjc.jar -target 5 JAR_BOOT = /usr/lib/jvm/java-6-openjdk/bin/jar JAVAH_BOOT = /usr/lib/jvm/java-6-openjdk/bin/javah -J-XX:ThreadStackSize=768 -J-client -J-Xmx512m -J-Xms256m -J-Xbootclasspath/p:./../make/sun/javac/javac/gjc.jar JAVA = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/bin/java -client -Xmx512m -Xms256m JAVAC = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/bin/javac -J-XX:ThreadStackSize=768 -J-client -J-Xmx512m -J-Xms256m JAR = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/bin/jar JAVAH = Build Platform Settings: USER = rednaxelafx PLATFORM = linux ARCH = i586 LIBARCH = i386 ARCH_FAMILY = i586 ARCH_DATA_MODEL = 32 ARCHPROP = i386 LINUX_VERSION = Unknown linux ALSA_VERSION = 1.0.23 OS_VERSION = 2.6.35-24-generic [requires at least 2.4.9-e.3] OS_NAME = linux TEMP_FREE_SPACE = 3056880 FREE_SPACE = 4614720 MB_OF_MEMORY = 2012 GNU Make Settings: MAKE = make MAKE_VER = 3.81 [requires at least 3.78] MAKECMDGOALS = sanity MAKEFLAGS = w -- ARCH_DATA_MODEL=32 ALT_MOTIF_DIR=/media/JDK6_build_area/jdk6u23/control/build/linux-i586/motif-i586 BUILD_MOTIF=true BUILD_HOTSPOT=true ALT_HOTSPOT_IMPORT_PATH=/media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/import ALT_OUTPUTDIR=/media/JDK6_build_area/jdk6u23/control/build/linux-i586 FULL_VERSION=1.6.0-internal-rednaxelafx_16_jan_2011_21_45-b00 JDK_BUILD_NUMBER=b00 BUILD_NUMBER=b00 MILESTONE=internal EXTERNALSANITYCONTROL=true HOTSPOT_IMPORT_CHECK=false HOTSPOT_BUILD_JOBS=2 ALT_DEVTOOLS_PATH=/usr/bin ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk SKIP_COMPARE_IMAGES=true BUILD_DEPLOY=false DEV_ONLY=true SHELL = /bin/sh Target Build Versions: JDK_VERSION = 1.6.0 MILESTONE = internal RELEASE = 1.6.0-internal FULL_VERSION = 1.6.0-internal-rednaxelafx_16_jan_2011_21_45-b00 BUILD_NUMBER = b00 External File/Binary Locations: USRJDKINSTANCES_PATH = /opt/java JDK_IMPORT_PATH = /java/re/j2se/1.6.0/promoted/latest/binaries/linux-i586 ALT_JDK_IMPORT_PATH = HOTSPOT_DOCS_IMPORT_PATH = /NO_DOCS_DIR ALT_HOTSPOT_DOCS_IMPORT_PATH = HOTSPOT_IMPORT_PATH = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/import ALT_HOTSPOT_IMPORT_PATH = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/import HOTSPOT_CLIENT_PATH = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/import/jre/lib/i386/client ALT_HOTSPOT_CLIENT_PATH = HOTSPOT_SERVER_PATH = /media/JDK6_build_area/jdk6u23/control/build/linux-i586/hotspot/import/jre/lib/i386/server ALT_HOTSPOT_SERVER_PATH = CACERTS_FILE = ./../src/share/lib/security/cacerts ALT_CACERTS_FILE = MOZILLA_HEADERS_PATH = /java/devtools/share/plugin ALT_MOZILLA_HEADERS_PATH = CUPS_HEADERS_PATH = /usr/include ALT_CUPS_HEADERS_PATH = Previous JDK Settings: PREVIOUS_RELEASE_PATH = /java/re/j2se/1.5.0/archive/fcs/bundles/linux-i586 ALT_PREVIOUS_RELEASE_PATH = PREVIOUS_JDK_VERSION = 1.5.0 ALT_PREVIOUS_JDK_VERSION = PREVIOUS_JDK_FILE = jdk-1_5_0-linux-i586.tar.gz ALT_PREVIOUS_JDK_FILE = PREVIOUS_JRE_FILE = jdk-1_5_0-linux-i586.tar.gz ALT_PREVIOUS_JRE_FILE = WARNING: Your are not building DEPLOY workspace from the control build. This will result in a development-only build of the J2SE workspace, lacking the plugin and javaws binaries. WARNING: Your are not building INSTALL workspace from the control build. This will result in a development-only build of the J2SE workspace, lacking the installation bundles WARNING: Your build environment has the variable DEV_ONLY defined. This will result in a development-only build of the J2SE workspace, lacking the documentation build and installation bundles. WARNING: The official linux builds use OS version 2.4.9-e.3. You appear to be using OS version 2.6.35-24-generic. WARNING: The build is being done on Linux Unknown linux. The official linux builds use Linux Advanced Server, specifically Linux Advanced Server release 2.1AS. The version found was '2.6.35-24-generic'. WARNING: The directory HOTSPOT_DOCS_IMPORT_PATH=/NO_DOCS_DIR does not exist, check your value of ALT_HOTSPOT_DOCS_IMPORT_PATH. WARNING: The linux compiler must be version 3.2 Specifically the GCC compiler. You appear to be using compiler version: 4.4 The compiler was obtained from the following location: /usr/bin/ Please change your compiler. WARNING: Importing CUPS from a system location Sanity check passed. make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
apt-get install过的包及其传递依赖:
引用
$ sudo apt-get install openjdk-6-jdk Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libice-dev libpthread-stubs0 libpthread-stubs0-dev libsm-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxt-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev Suggested packages: openjdk-6-demo openjdk-6-source visualvm The following NEW packages will be installed: libice-dev libpthread-stubs0 libpthread-stubs0-dev libsm-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxt-dev openjdk-6-jdk x11proto-core-dev x11proto-input-dev x11proto-kb-dev xtrans-dev 0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded. Need to get 15.3MB of archives. After this operation, 44.3MB of additional disk space will be used.
引用
$ sudo apt-get install build-essential Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: dpkg-dev fakeroot g++ g++-4.4 libalgorithm-diff-perl libalgorithm-merge-perl libdpkg-perl libstdc++6-4.4-dev patch Suggested packages: debian-keyring g++-multilib g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg libstdc++6-4.4-doc diffutils-doc The following NEW packages will be installed: build-essential dpkg-dev fakeroot g++ g++-4.4 libalgorithm-diff-perl libalgorithm-merge-perl libdpkg-perl libstdc++6-4.4-dev patch 0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded. Need to get 8,319kB of archives. After this operation, 25.0MB of additional disk space will be used.
引用
$ sudo apt-get install libasound2-dev Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: libasound2-doc The following NEW packages will be installed: libasound2-dev 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 509kB of archives. After this operation, 1,876kB of additional disk space will be used.
引用
$ sudo apt-get install libcups2-dev Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: comerr-dev krb5-multidev libgcrypt11-dev libgnutls-dev libgpg-error-dev libgssrpc4 libkadm5clnt-mit7 libkadm5srv-mit7 libkdb5-4 libkrb5-dev libtasn1-3-dev zlib1g-dev Suggested packages: krb5-doc libgcrypt11-doc gnutls-doc gnutls-bin guile-gnutls krb5-user The following NEW packages will be installed: comerr-dev krb5-multidev libcups2-dev libgcrypt11-dev libgnutls-dev libgpg-error-dev libgssrpc4 libkadm5clnt-mit7 libkadm5srv-mit7 libkdb5-4 libkrb5-dev libtasn1-3-dev zlib1g-dev 0 upgraded, 13 newly installed, 0 to remove and 0 not upgraded. Need to get 1,968kB of archives. After this operation, 6,136kB of additional disk space will be used.
引用
$ sudo apt-get install gawk Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: gawk 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 530kB of archives. After this operation, 2,150kB of additional disk space will be used.
引用
$ sudo apt-get install libmotif-dev Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libmotif3 The following NEW packages will be installed: libmotif-dev libmotif3 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 4,143kB of archives. After this operation, 12.1MB of additional disk space will be used.
引用
$ sudo apt-get install libxrender-dev Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: x11proto-render-dev The following NEW packages will be installed: libxrender-dev x11proto-render-dev 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 44.1kB of archives. After this operation, 217kB of additional disk space will be used.
引用
$ sudo apt-get install xorg-dev Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libdmx-dev libdmx1 libexpat1-dev libfontconfig1-dev libfontenc-dev libfreetype6-dev libfs-dev libpciaccess-dev libpixman-1-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxext-dev libxfixes-dev libxfont-dev libxft-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmu-headers libxmuu-dev libxpm-dev libxrandr-dev libxres-dev libxss-dev libxtst-dev libxv-dev libxvmc-dev libxxf86dga-dev libxxf86vm-dev x11proto-bigreqs-dev x11proto-composite-dev x11proto-damage-dev x11proto-dmx-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-fonts-dev x11proto-gl-dev x11proto-randr-dev x11proto-record-dev x11proto-resource-dev x11proto-scrnsaver-dev x11proto-video-dev x11proto-xcmisc-dev x11proto-xext-dev x11proto-xf86bigfont-dev x11proto-xf86dga-dev x11proto-xf86dri-dev x11proto-xf86vidmode-dev x11proto-xinerama-dev xserver-xorg-dev The following NEW packages will be installed: libdmx-dev libdmx1 libexpat1-dev libfontconfig1-dev libfontenc-dev libfreetype6-dev libfs-dev libpciaccess-dev libpixman-1-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxext-dev libxfixes-dev libxfont-dev libxft-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmu-headers libxmuu-dev libxpm-dev libxrandr-dev libxres-dev libxss-dev libxtst-dev libxv-dev libxvmc-dev libxxf86dga-dev libxxf86vm-dev x11proto-bigreqs-dev x11proto-composite-dev x11proto-damage-dev x11proto-dmx-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-fonts-dev x11proto-gl-dev x11proto-randr-dev x11proto-record-dev x11proto-resource-dev x11proto-scrnsaver-dev x11proto-video-dev x11proto-xcmisc-dev x11proto-xext-dev x11proto-xf86bigfont-dev x11proto-xf86dga-dev x11proto-xf86dri-dev x11proto-xf86vidmode-dev x11proto-xinerama-dev xorg-dev xserver-xorg-dev 0 upgraded, 54 newly installed, 0 to remove and 0 not upgraded. Need to get 4,389kB of archives. After this operation, 17.0MB of additional disk space will be used.
引用
$ sudo apt-get install m4 Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: m4 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 276kB of archives. After this operation, 655kB of additional disk space will be used.
引用
$ sudo apt-get install x11proto-print-dev Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: x11proto-print-dev 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 10.3kB of archives. After this operation, 98.3kB of additional disk space will be used.
引用
$ sudo apt-get install xprint Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libaudit0 libxfontp1 libxprintapputil1 libxprintutil1 xbase-clients xprint-common xprint-utils The following NEW packages will be installed: libaudit0 libxfontp1 libxprintapputil1 libxprintutil1 xbase-clients xprint xprint-common xprint-utils 0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. Need to get 1,787kB of archives. After this operation, 4,633kB of additional disk space will be used.
引用
$ sudo apt-get install xutils-dev Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: xutils-dev 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 314kB of archives. After this operation, 1,765kB of additional disk space will be used.
====================================================================
2011-08-07追记
刚build了一个最新的hotspot-comp出来,顺便加到这帖里。
源码地址:
要先装上Mercurial来抓源码。然后build之前要确定装了Ant。
下好源码后
chmod +x get_source.sh ./get_source.sh make LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk ALT_DEVTOOLS_PATH=/usr/bin SKIP_FASTDEBUG_BUILD=false HOTSPOT_BUILD_JOBS=2
如果jaxp和jaxwa的build出错的话在它们各自的build.properties文件里加上allow.downloads=true
jdk目录build的时候在javadoc上出了点问题,所以把jdk/make/Makefile里的docs整个注释掉了
64-bit: ARCH_DATA_MODEL=64
Charles Nutter's build script: https://gist.github.com/1148321
https://blogs.oracle.com/kto/entry/faster_openjdk_build_tricks
make -C make ALT_BOOTDIR=~/sdk/jdk1.8.0b49 ALT_SLASH_JAVA=$HOME/java LANG=C HOTSPOT_BUILD_JOBS=4 ARCH_DATA_MODEL=64 all_fastdebug
make sure this symlink is live: ~/java/re/j2se/1.8.0/promoted/latest/binaries/linux-amd64 -> some valid JDK8 installation
$ ln -s -T ~/sdk/jdk1.8.0 linux-amd64
在64位Ubuntu上构建32位HotSpot VM的话,
ARCH_DATA_MODEL=32
可能需要额外装 ia32-libs libc6-dev-i386 lib32stdc++6 g++-multilib 等
评论
23 楼
red_xie
2015-01-15
http://www.java.net/download/jdk6/6u23/promoted/b05/jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar
http://www.java.net/download/jdk6/6u23/promoted/b05/jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar
下载地址
http://www.java.net/download/jdk6/6u23/promoted/b05/jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar
下载地址
22 楼
AnonymMan
2014-11-20
/usr/bin/ld: /tmp/ccarybn9.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/tmp/ccarybn9.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[4]: *** [/opt/sunjdk1.6.0_23-6u23-source-code/control/build/linux-amd64/tmp/sun/sun.jdbc.odbc/JdbcOdbc/libodbcinst.so] Error 1
make[4]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/j2se/make/sun/jdbc'
make[3]: *** [all] Error 1
make[3]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/j2se/make/sun'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/j2se/make'
make[1]: *** [j2se-build] Error 2
make[1]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/control/make'
make: *** [dev-build] Error 2
amd64位的机器如果发生以上错误的话需要改下\jdk6_src\j2se\make\sun\jdbc\Makefile 里$(TEMPDIR)/libodbcinst.so: dummyodbc.c $(TEMPDIR)
$(CC) -shared -fPIC -o $@ $<
$(TEMPDIR)/libodbc.so: dummyodbc.c $(TEMPDIR)
$(CC) -shared -fPIC -o $@ $<
gcc编译的时候加上-fPIC。
/tmp/ccarybn9.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[4]: *** [/opt/sunjdk1.6.0_23-6u23-source-code/control/build/linux-amd64/tmp/sun/sun.jdbc.odbc/JdbcOdbc/libodbcinst.so] Error 1
make[4]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/j2se/make/sun/jdbc'
make[3]: *** [all] Error 1
make[3]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/j2se/make/sun'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/j2se/make'
make[1]: *** [j2se-build] Error 2
make[1]: Leaving directory `/opt/sunjdk1.6.0_23-6u23-source-code/control/make'
make: *** [dev-build] Error 2
amd64位的机器如果发生以上错误的话需要改下\jdk6_src\j2se\make\sun\jdbc\Makefile 里$(TEMPDIR)/libodbcinst.so: dummyodbc.c $(TEMPDIR)
$(CC) -shared -fPIC -o $@ $<
$(TEMPDIR)/libodbc.so: dummyodbc.c $(TEMPDIR)
$(CC) -shared -fPIC -o $@ $<
gcc编译的时候加上-fPIC。
21 楼
RednaxelaFX
2013-03-04
Nature_myJava 写道
请问openjdk和jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar,jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar有什么关系?openjdk不是源码吗?还是一部分的源码,而jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar是另外一部分的源码?求大神指教下。。。
请看这帖了解OpenJDK的一些历史,以及open和closed版直接的关系:http://rednaxelafx.iteye.com/blog/1549577
然后看这帖来了解OpenJDK与Oracle JDK的版本对应关系:https://gist.github.com/rednaxelafx/925323
然后,所有带有“JRL”字样的源码包都不是OpenJDK而是以Java Research License发布的闭源版JDK的源码。有src字样的是源码包,没src字样的是编译好的二进制发布文件。
20 楼
Nature_myJava
2013-03-04
请问openjdk和jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar,jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar有什么关系?openjdk不是源码吗?还是一部分的源码,而jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar是另外一部分的源码?求大神指教下。。。
19 楼
di1984HIT
2013-02-10
呵呵,我还是构建OpenJDK的吧。Windows的版本太麻烦了。
18 楼
guoguo007
2012-05-31
RednaxelaFX 写道
guoguo007 写道
RednaxelaFX 写道
guoguo007 写道
/usr/bin/ld: cannot open output file util/mkmsgcat: Permission denied
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
上个问题解决后,又报来下面的错误,不太清除错误内容,请帮忙看一下,多谢!
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
前面肯定还有什么别的错误信息才对。
话说我不是特别明白build起来这么困难为什么一定要弄…请问是需要修改里面的源码么?如果不需要build出AWT之类的那些东西可以想办法跳过去的。
这个问题解决了,是没有安装imake,我google了一把
17 楼
RednaxelaFX
2012-05-27
guoguo007 写道
RednaxelaFX 写道
guoguo007 写道
/usr/bin/ld: cannot open output file util/mkmsgcat: Permission denied
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
上个问题解决后,又报来下面的错误,不太清除错误内容,请帮忙看一下,多谢!
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
前面肯定还有什么别的错误信息才对。
话说我不是特别明白build起来这么困难为什么一定要弄…请问是需要修改里面的源码么?如果不需要build出AWT之类的那些东西可以想办法跳过去的。
16 楼
guoguo007
2012-05-27
RednaxelaFX 写道
guoguo007 写道
/usr/bin/ld: cannot open output file util/mkmsgcat: Permission denied
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
上个问题解决后,又报来下面的错误,不太清除错误内容,请帮忙看一下,多谢!
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[2]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
(cd util; make)
make[3]: Entering directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[3]: *** No rule to make target `/usr/X11R6/lib/X11/config/Imake.tmpl', needed by `xmkmf'. Stop.
make[3]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm/util'
make[2]: *** [util/mkcatdefs] Error 2
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
15 楼
eryuanz
2011-11-23
RednaxelaFX 写道
eryuanz 写道
我现在在ia64上编译Jdk1.6.22,现在报错:
呃呵呵,IA-64上的问题我就没办法帮忙了,没这么高端的装备啊
看起来像是ad文件里有问题。但实际是什么问题我看不出来…
呵呵 高端装备折磨死我了,谢谢啦O(∩_∩)O~
14 楼
RednaxelaFX
2011-11-23
eryuanz 写道
我现在在ia64上编译Jdk1.6.22,现在报错:
呃呵呵,IA-64上的问题我就没办法帮忙了,没这么高端的装备啊
看起来像是ad文件里有问题。但实际是什么问题我看不出来…
13 楼
eryuanz
2011-11-23
问:
我现在在ia64上编译Jdk1.6.22,现在报错:
make[6]: Entering directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir/linux_ia64_compiler2/product'
../generated/adfiles/adlc -DLINUX -D_GNU_SOURCE -DIA64 -DCC_INTERP -q -T -D_LP64 ../generated/adfiles/linux_ia64.ad \
-c../generated/adfiles/mktmp22565/ad_ia64.cpp -h../generated/adfiles/mktmp22565/ad_ia64.hpp -a../generated/adfiles/mktmp22565/dfa_ia64.cpp -v../generated/adfiles/mktmp22565/adGlobals_ia64.hpp \
|| { rm -rf ../generated/adfiles/mktmp22565; exit 1; }
11111111111111111111111 index: (null)
indexStr: LoadC
Ideal node missing: LoadC
assert fails /home/jdk22/hotspot/src/share/vm/adlc/archDesc.cpp 499: Failed lookup of ideal node
/bin/sh: line 2: 22570 Aborted ../generated/adfiles/adlc -DLINUX -D_GNU_SOURCE -DIA64 -DCC_INTERP -q -T -D_LP64 ../generated/adfiles/linux_ia64.ad -c../generated/adfiles/mktmp22565/ad_ia64.cpp -h../generated/adfiles/mktmp22565/ad_ia64.hpp -a../generated/adfiles/mktmp22565/dfa_ia64.cpp -v../generated/adfiles/mktmp22565/adGlobals_ia64.hpp
make[6]: *** [refresh_adfiles] Error 1
make[6]: Leaving directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir/linux_ia64_compiler2/product'
make[5]: *** [ad_stuff] Error 2
make[5]: Leaving directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir/linux_ia64_compiler2/product'
make[4]: *** [product] Error 2
make[4]: Leaving directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir'
make[3]: *** [generic_build2] Error 2
make[3]: Leaving directory `/home/jdk22/hotspot/make'
make[2]: *** [product] Error 2
make[2]: Leaving directory `/home/jdk22/hotspot/make'
make[1]: *** [hotspot-build] Error 2
make[1]: Leaving directory `/home/jdk22/control/make'
make: *** [dev-build] Error 2
其中的111111是我打印出来的,现在不知道哪里出了问题,谢谢啦
我现在在ia64上编译Jdk1.6.22,现在报错:
make[6]: Entering directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir/linux_ia64_compiler2/product'
../generated/adfiles/adlc -DLINUX -D_GNU_SOURCE -DIA64 -DCC_INTERP -q -T -D_LP64 ../generated/adfiles/linux_ia64.ad \
-c../generated/adfiles/mktmp22565/ad_ia64.cpp -h../generated/adfiles/mktmp22565/ad_ia64.hpp -a../generated/adfiles/mktmp22565/dfa_ia64.cpp -v../generated/adfiles/mktmp22565/adGlobals_ia64.hpp \
|| { rm -rf ../generated/adfiles/mktmp22565; exit 1; }
11111111111111111111111 index: (null)
indexStr: LoadC
Ideal node missing: LoadC
assert fails /home/jdk22/hotspot/src/share/vm/adlc/archDesc.cpp 499: Failed lookup of ideal node
/bin/sh: line 2: 22570 Aborted ../generated/adfiles/adlc -DLINUX -D_GNU_SOURCE -DIA64 -DCC_INTERP -q -T -D_LP64 ../generated/adfiles/linux_ia64.ad -c../generated/adfiles/mktmp22565/ad_ia64.cpp -h../generated/adfiles/mktmp22565/ad_ia64.hpp -a../generated/adfiles/mktmp22565/dfa_ia64.cpp -v../generated/adfiles/mktmp22565/adGlobals_ia64.hpp
make[6]: *** [refresh_adfiles] Error 1
make[6]: Leaving directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir/linux_ia64_compiler2/product'
make[5]: *** [ad_stuff] Error 2
make[5]: Leaving directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir/linux_ia64_compiler2/product'
make[4]: *** [product] Error 2
make[4]: Leaving directory `/home/jdk22/control/build/linux-ia64/hotspot/outputdir'
make[3]: *** [generic_build2] Error 2
make[3]: Leaving directory `/home/jdk22/hotspot/make'
make[2]: *** [product] Error 2
make[2]: Leaving directory `/home/jdk22/hotspot/make'
make[1]: *** [hotspot-build] Error 2
make[1]: Leaving directory `/home/jdk22/control/make'
make: *** [dev-build] Error 2
其中的111111是我打印出来的,现在不知道哪里出了问题,谢谢啦
12 楼
RednaxelaFX
2011-11-23
guoguo007 写道
/usr/bin/ld: cannot open output file util/mkmsgcat: Permission denied
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
你的系统的Tcl相关包没装全么?我不太肯定这错误是啥…
11 楼
guoguo007
2011-11-22
/usr/bin/ld: cannot open output file util/mkmsgcat: Permission denied
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
collect2: ld returned 1 exit status
make[2]: *** [util/mkmsgcat] Error 1
make[2]: Leaving directory `/media/JDK6_build_area/jdk6u23/motif/lib/Xm'
make[1]: *** [motif-build] Error 2
make[1]: Leaving directory `/media/JDK6_build_area/jdk6u23/control/make'
make: *** [dev-build] Error 2
老大,我的貌似还报错哈,有什么办法吗?
10 楼
hobitton
2011-07-15
RednaxelaFX 写道
chenjingbo 写道
忽忽,傻了.上面那个问题忽略.现在的问题是
No X11 DISPLAY variable was set, but this program performed an operation which requires it. java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.
你在解压源码JAR的时候一定要有X支持的图形界面,否则它就无法解压。例如说如果你简单的通告ssh连接到远程服务器去做这个解压就会失败,因为那样连接只要字符界面而没有图形界面。
貌似有个设置display的,设置了ssh就可以做这样的事了。
9 楼
RednaxelaFX
2011-07-06
chenjingbo 写道
忽忽,傻了.上面那个问题忽略.现在的问题是
No X11 DISPLAY variable was set, but this program performed an operation which requires it. java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.
你在解压源码JAR的时候一定要有X支持的图形界面,否则它就无法解压。例如说如果你简单的通告ssh连接到远程服务器去做这个解压就会失败,因为那样连接只要字符界面而没有图形界面。
8 楼
chenjingbo
2011-07-06
忽忽,傻了.上面那个问题忽略.现在的问题是
No X11 DISPLAY variable was set, but this program performed an operation which requires it. java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.
7 楼
chenjingbo
2011-07-06
你好,请问下,为什么我下载来的jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar没有你说的j2se/src/solaris/native/sun/awt/awt_GraphicsEnv.c文件,也没有control/make目录呢.我只有
谢谢哦
-rw-r--r-- 1 root root 7143 Nov 12 2010 LICENSE drwxr-xr-x 2 root root 4096 Jul 5 19:54 META-INF/ -rw-r--r-- 1 root root 172 Nov 12 2010 README -rw-r--r-- 1 root root 9 Nov 12 2010 SIZE -rw-r--r-- 1 root root 146601985 Nov 12 2010 X_X drwxr-xr-x 3 root root 4096 Jul 5 19:54 com/ -rw-r--r-- 1 root root 2114362 Dec 8 2010 jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar -rw-r--r-- 1 root root 143157743 Dec 8 2010 jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar
谢谢哦
6 楼
RednaxelaFX
2011-07-02
all_wmh 写道
弱弱的问一声 编译要多久呀 我都2-3个小时了 还没完。。。
快了…吧。你机器太慢了,哈哈。我在服务器上build的时候貌似是十来分钟build完的。
平时工作我都只build出HotSpot VM,这就很快,在我的笔记本上干净的build一次不超过4分钟。一般小量修改代码再build只要十几秒就好了。
5 楼
all_wmh
2011-07-02
弱弱的问一声 编译要多久呀 我都2-3个小时了 还没完。。。
4 楼
lwwin
2011-01-17
这一次的练习就保留了- -||| 内容太丰富……
发表评论
-
The Prehistory of Java, HotSpot and Train
2014-06-02 08:18 0http://cs.gmu.edu/cne/itcore/vi ... -
MSJVM and Sun 1.0.x/1.1.x
2014-05-20 18:50 0当年的survey paper: http://www.sym ... -
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
class data sharing by Apple
2014-03-28 05:17 0class data sharing is implement ... -
HotSpot Server VM与Server Class Machine
2014-02-18 13:21 0HotSpot VM历来有Client VM与Server V ... -
Java 8的lambda表达式在OpenJDK8中的实现
2014-02-04 12:08 0三月份JDK8就要发布首发了,现在JDK8 release c ... -
GC stack map与deopt stack map的异同
2014-01-08 09:56 0两者之间不并存在包含关系。它们有交集,但也各自有特别的地方。 ... -
HotSpot Server Compiler与data-flow analysis
2014-01-07 17:41 0http://en.wikipedia.org/wiki/Da ... -
基于LLVM实现VM的JIT的一些痛点
2014-01-07 17:25 0同事Philip Reames Sanjoy Das http ... -
tailcall notes
2013-12-27 07:42 0http://blogs.msdn.com/b/clrcode ... -
《自制编程语言》的一些笔记
2013-11-24 00:20 0http://kmaebashi.com/programmer ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22396(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21495(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ... -
也谈类型: 数据, 类型, 标签
2013-08-18 01:59 0numeric tower http://en.wikiped ... -
oop、klass、handle的关系
2013-07-30 17:34 0oopDesc及其子类的实例 oop : oopDesc* ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ...
相关推荐
在本课程“基础篇3-虚拟机安装xubuntu开发环境”中,我们将深入探讨如何为初学者构建一个理想的Python编程环境。Xubuntu是一款基于Ubuntu的轻量级Linux发行版,它提供了一个用户友好的界面,适合新手使用。通过在...
安装Oracle数据库是在Linux操作系统上进行的一项常见任务,尤其适用于数据密集型的企业应用场景。Ubuntu作为一款流行的操作系统,受到了很多Oracle数据库管理员的青睐。Ubuntu 14.04.1是目前稳定版中较早的一个版本...
xubuntu-20.04-desktop-amd64.iso.torrent
在本文中,我们将深入探讨XUbuntu 20.04.2 "Focal Fossa" 的简体中文版,以及其在个人和企业环境中的应用。 一、XUbuntu 20.04.2 系统概述 XUbuntu 20.04.2是长期支持(LTS)版本,意味着它将得到至少五年的安全...
xubuntu-18.04.4-desktop-i386.iso.torrent
Xubuntu(发音为ZOO-bun-too)是一个Ubuntu Linux的官方派生版,它基于桌面环境Xfce。Xubuntu主要面向旧式电脑的用户和寻求更快捷的桌面环境的用户。它主要运行基于GTK+的程序。与ubuntu不完全相同。
标题中的"xubuntu-20.04.2-desktop-cs-amd64.txt.tar.gz"是一个文件名,它包含了几个关键信息。首先,“XUbuntu”是Linux发行版的一个变种,基于Ubuntu,但使用Xfce桌面环境,提供了一个轻量级、高效的用户体验。...
xubuntu-i3wm 不完整!!! 使用工具/软件和i3拼贴窗口管理器安装xubuntu的指南 OBS!升级后重新启动计算机以加载新Linux内核 对于VM:您应该安装来宾扩展程序和以下软件 sudo apt update && sudo apt upgrade -y ...
在Ubuntu 14.04 (amd64)上安装Oracle Linux x64 11g R2涉及多个步骤和关键技术点。以下是一份详细的指南,涵盖了从系统安装到Oracle数据库部署的整个过程: 1. **系统安装**: - 首先,参照《Ubuntu系统安装.mm》...
《SANGFOR_aDesk_V5.2_xubuntu系统虚拟机部署配置详解》 在桌面云技术日益成熟的今天,SANGFOR_aDesk_V5.2 提供了针对 ...通过遵循上述指南,用户可以有效地构建和优化xubuntu虚拟机,实现高效、稳定的云桌面环境。
本教程章节专注于介绍如何在计算机上安装Xubuntu Linux操作系统,Xubuntu是Ubuntu的一个衍生版,使用XFCE桌面环境,以轻量级和高效为特点,适合老旧硬件或者对系统资源要求严格的用户。下面将详细阐述安装过程中的...
一个可以制作usb启动盘的工具,非常好用,可以直接把很多的linux live 光盘直接制作在usb上启动。目前支持下列系统: — Debian Live 32/64 Bit — Debian Live 7 Gnome 32bit Debian Live 7 Gnome 64bit Debian ...
对您全新的Xubuntu计算机安装很有用。 测试于:Xubuntu 18.04 安装 一体: wget https://raw.githubusercontent.com/rekurzia/computer/master/{base,additional}.sh for part in {base,additional} ; do sudo sh $...
将安装常用应用程序的构建脚本,默认情况下未安装在 Ubuntu/Ubuntu 版本上 评论:此脚本包含基于 debian 和基于 ubuntu 的发行版的安装命令,即 Ubuntu (proper)、Ubuntu-Mate、Xubuntu、Kubuntu、Ubuntu Budgie、...
在本教程中,我们将深入探讨如何在虚拟机中安装最新的Ubuntu 20.04.06 LTS(长期支持版)操作系统,同时设置适合飞控开发的环境。首先,我们需要了解Linux系统的分区策略,以及如何准备必要的安装工具。 1. **EFI...
这个项目特别强调了它在 Xubuntu 发行版上的编译和测试过程,意味着开发者或者用户可以在 Xubuntu 上顺利地运行和调试此作弊软件。 该项目的核心编程语言是 C++,这是一种广泛应用于系统编程、游戏开发、服务器端...
基于XUbuntu的发行版,完全基于13.04进行了自定义! 立即获取,体验喷气式飞机的强大功能!
xubuntu-vnc:具有VNC和各种应用程序的无头UbuntuXfce容器
TMFCoreBuildWar 该存储库包含构建的所需的子存储库,特别是... 在 Xubuntu 14.10 上,您可以通过运行以下命令来安装上述所有软件包: sudo apt-get install maven openjdk-8-jdk 如何构建和清理代码 安装所有依赖项
对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同...