ubuntu 13.04环境编译OpenJDK7

从openjdk代码仓库下载源码

 

  1. 需要安装Mercurial(hg)版本管理工具。
    写道
    sudo apt-get install mercurial
     
  2. 安装Mercurial的hclone扩展插件:
    写道
    hg clone http://bitbucket.org/pmezard/hgforest-crew
      
  3. 将以下内容添加到$HOME/.hgrc文件中,如果没有则自己创建一个:
    写道
    [extensions]
    forest=/home/lichengwu/hgforest-crew/forest.py
    fetch=
     
  4. 下载jdk7源码:
    写道
    hg fclone http://hg.openjdk.java.net/jdk7/jdk7
    cd jdk7/ && sh get_source.sh
     
直接下载源码包[推荐]
写道
http://download.java.net/openjdk/jdk7u4/promoted/b22/
 

安装编译必须组件

 

  1. 安装gcc、g++、make等
    写道
    sudo apt-get install build-essential
     
  2. 安装ant 1.7以上
    写道
    sudo apt-get install ant
     
  3. 安装XRender
    写道
    sudo apt-get install libxrender-dev
    sudo apt-get install xorg-dev
     
  4. 安装alsa
    写道
    sudo apt-get install libasound2-dev
     
  5. Cups
    写道
    sudo apt-get install libcups2-dev
     
  6. 安装jdk6
    写道
    #一般ubuntu都自带,没有的话
    sudo apt-get install openjdk-6-jdk
     
  7. 我是使用的oracle的jdk6,可以编译成功

  8. 安装零碎的工具包
    写道
    sudo apt-get install gawk zip libxtst-dev libxi-dev libxt-dev

测试编译脚本:

写道
export LANG=C ALT_BOOTDIR=/usr/belleing/java
#disable JAVA_HOME
export -n JAVA_HOME
export ALT_JDK_IMPORT_PATH=/usr/belleing/java
make sanity BUILD_JAXWS=false BUILD_JAXP =false
 如果出现:Sanity check passed.则表示测试编译通过了,不过也别开心得太早,真正make的时候不保证一定没问题,也许还会缺少某些依赖。

编译脚本:

写道
#!/bin/bash
# cd jdk source code folder
cd ~/workspace/openjdk
# export ALT_BOOTDIR
export LANG=C ALT_BOOTDIR=/usr/belleing/java
# set build profile,first 'chmod +x jdk_generic_profile.sh'
jdk/make/jdk_generic_profile.sh
# disable JAVA_HOME
export -n JAVA_HOME
# export ALT_JDK_IMPORT_PATH
export ALT_JDK_IMPORT_PATH=/usr/belleing/java
# start build
export ALLOW_DOWNLOADS=true
make DEBUG_NAME=all_fastdebug
#make DEBUG_NAME=all_fastdebug BUILD_JAXWS=false BUILD_JAXP=false

   

下面就是解决make出现的各种问题和解决方案:

 

1.ERROR: You do not have access to valid Cups header files.
需要安装cpus的dev包

sudo apt-get install libcups2-dev

2.ERROR: The version of ant being used is older than the required version of '1.7.1'. The version of ant found was ''.
这说明没有装ant

sudo apt-get install ant

3. ERROR: FreeType version 2.3.0 or higher is required.

安装freetype的dev包

sudo apt-get install libfreetype6-dev

4. ERROR: You seem to not have installed ALSA 0.9.1 or higher.
不需要从ALSA官网下载alsa-dev和alsa-drive, ubuntu提供包的

sudo apt-get install libasound2-dev

5. ERROR: echo "*** This OS is not supported:" 'uname -a'; exit 1;
很奇怪的错误,anyway,注释掉hotspot/make/linux/Makefile里面的checkOS

check_os_version:
#ifeq ($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),)
# $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1;
#endif


Update: 最好的办法是在make参数后面添加 DISABLE_HOTSPOT_OS_VERSION_CHECK=OK 即可

 

6. ERROR: error: "__LEAF" redefined [-Werror]

这个是已知的bug(http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/a6eef545f1a2), 在hopspot下打入该patch(http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/raw-rev/a6eef545f1a2)即可

7. ERROR error: converting ‘false’ to pointer type ‘methodOop’ [-Werror=conversion-null]

这个的问题是把 false 转换成 NULL的时候出错了
同样在hotspot下 打入该 patch(http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/raw-rev/f457154eee8b)

 

8. ERROR gcc: error: unrecognized command line option '-mimpure-text'
这个-mimpure-text是gcc给Solaris的编译选项,所以注释掉即可
文件在./jdk/make/common/shared/Compiler-gcc.gmk +70

9. ERROR undefined reference to 'snd_pcm_format_**'

folow this link Build openjdk in Ubuntu 11.10

 

在jdk/make/javax/sound/jsoundalsa/Makefile 里面


 

编译成功!


 

参考资料:

编译:http://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html

http://hadwinzhy.gitcafe.com/blog/2013/01/21/compile-jdk/

http://wendal.net/420.html
http://thebye85.iteye.com/blog/1545311

http://rednaxelafx.iteye.com/blog/875957


关于为啥要自己编译jdk:http://rednaxelafx.iteye.com/blog/1549577


from:

http://cduym.iteye.com/blog/1892416

(一)
在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息:
/usr/bin/ld: cannot find -lxxx


这些讯息会随着编译不同类型的source code 而有不同的结果出来如:
/usr/bin/ld: cannot find -lc
/usr/bin/ld: cannot find -lltdl
/usr/bin/ld: cannot find -lXtst


其中xxx即表示函式库文件名称,如上例的:libc.so、libltdl.so、libXtst.so。
其命名规则是:lib+库名(即xxx)+.so。




会发生这样的原因有以下三种情形:
1 系统没有安装相对应的lib
2 相对应的lib版本不对
3 lib(.so档)的symbolic link 不正确,没有连结到正确的函式库文件(.so)


对于上述三种原因有一篇文章写的很棒可参考这一篇文章的第4点:
gcc命令祥解




解决方法:
(1)先判断在/usr/lib 下的相对应的函式库文件(.so) 的symbolic link 是否正确
若不正确改成正确的连结目标即可解决问题。


(2)若不是symbolic link 的问题引起,而是系统缺少相对应的lib安装lib即可解决。


(3)如何安装缺少的lib:
以上面三个错误讯息为例:
错误1缺少libc的LIB
错误2缺少libltdl的LIB
错误3缺少libXtst的LIB
 


  以Ubuntu为例:
  先搜寻相对应的LIB再进行安装的作业如:
apt-cache search libc-dev
apt-cache search libltdl-dev
apt-cache search libXtst-dev


实例:
在进行输入法gcin的Source Code的编译时出现以下的错误讯息:
/usr/bin/ld: cannot find -lXtst


经检查后发现是:
lib(.so档)的symbolic link 不正确


解决方法如下:
cd /usr/lib
ln -s libXtst.so.6 libXtst.so


如果在/usr/lib的目录下找不到libXtst.so 档,那么就表示系统没有安装libXtst的函式库。
解法如下:
apt-get install libxtst-dev



http://blog.youkuaiyun.com/qxb1229/article/details/8616274
 
编译程序时出现的错误,在安装日志上发现一句:x11/xlib.h nosuch file or directory
 
sudo apt-get install libx11-dev
sudo apt-get install libgtkglextmm-x11-dev
sudo apt-get install libghc6-x11-dev
sudo apt-get install libgl1-mesa-swx11-dev

 

7.1 找不到X11库:

执行 sudo apt-get install libx11-dev

7.2 fatal error: X11/extensions/shape.h: No such file or directory

执行 sudo apt-get install libxext-dev

7.3 fatal error: X11/extensions/Xrender.h: No such file or directory

执行 sudo apt-get install libxrender-dev

7.4 fatal error: X11/extensions/XTest.h: No such file or directory

执行 sudo apt-get install libxtst-dev

7.5 fatal error: ft2build.h: No such file or directory

执行 sudo apt-get install libxtst-dev

7.6 如果还有缺少库的情况,可以到这里http://packages.ubuntu.com/搜索。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值