`
Cwind
  • 浏览: 265539 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
793bb7df-a2a9-312d-8cb8-b66c3af482d1
LeetCode题解
浏览量:53564
社区版块
存档分类
最新评论

在CentOS5.5上编译OpenJDK6

阅读更多

几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。

0. OpenJDK介绍

OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点:

1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是在原本JDK依赖的第三方库上,包括加密库、音频库、字体等。核心部分,也就是HotSpot VM与Java核心库基本上保持了Sun JDK的原貌,甚至还比Sun JDK更快的吸收社区反馈的贡献)

2、它是真正开源的,许可证是GPLv2+CE,使用上比原本JDK的另外两种许可证要自由一些;

3、由于考虑到社区的开发者的build环境需求,OpenJDK的构建系统比原本的JDK有大幅改进,使整个build过程变得非常轻松。

--引自师兄RednaxelaFX的博客文章

编译过程参考了许多文章,详见附录。不像其他多数文章一样只是单纯的第一步敲什么命令第二步敲什么命令,RednaxelaFX的笔记尤其详细,从背景到各依赖项和配置项都说得很明白。强烈建议参考。

前一类的文章只有命令没有解释,遇到由于链接失效或版本不匹配的情况,命令执行不下去。新手如果不擅长从错误日志中分析原因往往就会卡个半天。所以方法论层面的东西就显得尤为重要。

我们的需求:在Linux XX 发行版(版本号xx)上编译OpenJDK x

基本步骤:

1. 下载OpenJDK x源码 http://download.java.net/openjdk/

2. 参考相应源码中的Build README,了解所需编译环境、依赖包

3. 安装依赖包

4. 环境配置

5. 健全性检查

6. 编译

最后的编译过程视配置情况从十几分钟到几小时不等,困难之处在解决3、4、5步骤中可能会遇到的各种问题。

同一个解决方案不适用于不同的Linux发行版本,甚至不适用于同一个发行版本的两个小版本;OpenJDK的版本、以及各个依赖包的版本都会有影响;

主要的错误都在于缺少某个依赖包、缺少某个特定版本的依赖包、缺少某个头文件、找不到某个特定类型--基本上都属于依赖包缺失导致的。

学会通过错误日志发现并解决问题才是更重要更有益的。

下面以本人在CentOS5.5上编译OpenJDK6的过程来具体说明:

1. 下载OpenJDK6源码

http://download.java.net/openjdk/jdk6/ 


2. 查看README,了解编译环境和所需依赖包

http://hg.openjdk.java.net/jdk6/jdk6/raw-file/tip/README-builds.html

这个文档中没有针对CentOS的编译环境的专门说明,只有针对Fedroa的。由于CentOS是RHEL(RedHat Enterprise Linux)去掉redhat标志重新编译的Linux版本,与RHEL很接近,而Fedroa又是RedHat公司支持的社区版,因此可以参照Fedroa的环境配置CentOS


Fedora 9
After installing Fedora 9 you need to install several build dependencies. The simplest way to do it is to execute the following commands as user root:
yum-builddep java-1.6.0-openjdk
yum install gcc gcc-c++
In addition, it's necessary to set a few environment variables for the build:
export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk
可见,要编译OpenJDK,首先需要一个JDK(作为Bootstrap JDK, 否则Ant等工具无法运行),然后需要gcc/g++等编译器,同时需要设置相应的环境变量,取消JAVA_HOME(unset JAVA_HOME)的设置,将ALT_BOOTDIR指向已有jdk所在目录

在README文档中的Build Dependencies一节中可以看到编译所需的依赖包

Ant,构建工具,注意对它的版本也有要求;README中提到至少要1.7.1,而在实际编译中需要1.8.2以上

gcc, 版本4.0以上

CUPS(Common Unix Printing System,通用Unix打印系统)的头文件

Motif, 由开放基金协会OSF开发的一个工业标准GUI的相关头文件

FreeType, 一个开源的字体引擎,提供统一的接口来访问字体格式文件,要求版本2.3以上

ALSA(Advanced Linux Sound Architecture,高级Linux声音架构),为Linux提供音频和MIDI支持。要求版本0.9以上

Xorg,Xorg基金会的X11开源实现


3. 安装依赖包

其实建议的方法是在下载完代码和安装好Bootstrap JDK和Ant之后直接使用make sanity进行健全性检查。此时由于缺少Build Dependencies中的依赖包理所当然地会报出非常多的错误。根据错误日志中提示缺少的具体包和具体版本再进行安装

安装依赖包首选通过yum install直接安装;但yum源上有时没有指定版本的rpm,这就需要单独下载安装了(例如Ant1.8和FreeType2.3)。每个所需依赖包的安装又可以单独用一篇帖子介绍,主要是各自又存在软件包的依赖性问题。一般来说,建议下载源码进行编译,这样有错误比较容易检查;下载rpm包安装容易陷入无限的依赖循环中去。


3.0 gcc

yum install gcc gcc-c++

3.1 alsa

yum install alsa-lib alsa-lib-devel 

3.2 cups

yum install cups-devel

3.3 libXi

yum install libXi libXi-devel

3.4 xorg

yum install xorg-X11

3.5 freetype

wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.12.tar.gz

tar -xvf freetype-2.3.12.tar.gz

cd freetype-2.3.12

./configure && make && make install

3.6 ant

wget http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.8.2-bin.zip

解压,配置ANT_HOME

3.7 motif

yum install openmotif

yum install openmotif-devel

3.8 ant-nodeps

yum install ant-nodeps

3.9 libXtst

yum install libXtst

yum install libXtst-devel


4. 环境配置

export ALT_BOOTDIR=Bootstrap JDK目录

export ANT_HOME=ant安装目录

export ALT_FREETYPE_HEADERS_PATH=/usr/local/include/freetype2 #freetype2头文件安装目录

export ALT_FREETYPE_LIB_PATH=/usr/local/lib #freetype2 lib目录

要为所有用户设定这些环境变量,可将上述语句添加到/etc/profile中。修改环境变量的方式在此不赘述

不要忘记README中的 export LANG=C和unset JAVA_HOME


5. 健全性检查

在下载的OpenJDK源码目录中执行make sanity进行检查。

输出Sanity check passed.表示检查通过


6. 执行编译

在健全性检查通过后,可以通过make执行编译

make all ARCH_DATA_MODEL=64 ALLOW_DOWNLOADS=true


7. 问题排查

如前所述,在安装了README中所述的依赖包之外,还会因为各自的环境不同报缺少依赖包或缺少头文件等问题。

7.1缺少依赖包

一种情况是能够直接在yum源上找到,如ant-nodeps, lXtst;参见3.8、3.9

另一种情况是yum源上找不到,或者源上的版本比较旧,如ant, freetype;参见3.5、3.6

7.2 缺少头文件

如缺少motif相关头文件、CUPS相关头文件等;日志不会提示缺少哪个包,只提示缺少具体的某个头文件,如"AtomMgr.h"

须先通过yum provides AtomMgr.h查看缺少的头文件在哪个软件包中,然后再yum install安装该软件包

极端情况yum provides找不到头文件归属,此时请自行Google

笔者实际遇到的问题:

健全检查时:

1. 缺少freetype2.3

2. 缺少AtomMgr.h

3. 缺少CUPS.h

编译时:

1. Could not create task or type of type: replaceregexp

参见:http://stackoverflow.com/questions/8944128/ants-optional-tasks-are-not-available-on-centos

Missing regexp.jar

yum install ant-nodeps

2. /usr/bin/ld: cannot find -lXtst

解决方案在正文中已经全部提过了。

不管遇到什么问题,要从该问题产生的本质去思考去排查。

方法论比方法重要。渔比鱼重要。


Reference:

1. 在XUbuntu 10.10上以JRL源码构建Oracle JDK 6 update 23, http://rednaxelafx.iteye.com/blog/875957

2. Wikipedia: OpenJDK, http://en.wikipedia.org/wiki/OpenJDK

3. OpenJDK 6 Build README, http://hg.openjdk.java.net/jdk6/jdk6/raw-file/tip/README-builds.html

4. centos 5 5.3 编译openjdk 7, http://hi.baidu.com/jongsuny/item/dfc96c2dce1a029bb73263dd

5. OpenJDK编译手记, http://khotyn.iteye.com/blog/1225348


文中所有链接及参考资料在本文发布之时均验证可用

1
2
分享到:
评论

相关推荐

    Linux CentOS5.5 web配置

    在Linux CentOS5.5系统中进行Web配置是一项常见的任务,对于服务器管理和网站部署至关重要。本文将深入探讨CentOS5.5下的Web配置方法,包括基本配置、路径设置、访问控制、用户认证以及虚拟主机的配置等关键知识点。...

    centos 5.5 32位 下载地址

    在探讨“CentOS 5.5 32位下载地址”的相关知识点时,我们首先要理解CentOS系统的基本概念,以及其版本与架构的区别,再深入分析下载资源的重要性及获取方式。 ### CentOS概述 CentOS(Community ENTerprise ...

    centos5.5 32 64位下载地址

    【描述】"centos5.5下载地址 32 64"提示我们需要寻找可以下载这个旧版CentOS的官方或可靠的第三方链接。由于CentOS 5.5已经不再维护,官方可能不再提供直接的下载服务。然而,为了满足某些特定的需求,例如软件兼容...

    CENTOS5.5软RAID1配置及更换硬盘

    在 CENTOS5.5 系统中,我们可以使用 mdadm 工具来创建软 RAID1 设备。 RAID 的原理 RAID(Redundant Array of Independent Disks)是一种将多个硬盘组合成一个逻辑磁盘的技术。它可以提高数据的安全性和可用性,...

    CentOS 5.5提权exp

    CentOS 5.5提权exp

    CentOS 5.5安装全过程

    在本文中,我们将详细探讨CentOS 5.5的安装步骤,帮助您了解如何在您的硬件上成功部署这个操作系统。 1. **准备工作** 在开始安装前,确保您拥有以下内容: - CentOS 5.5的安装介质,通常为DVD或ISO镜像。 - 一...

    Centos5.5下Qt的安装配置

    在编译的过程中出现了如下错误: …undefined reference to `FcFreeTypeQueryFace'… undefined reference to `FT_Library_SetLcdFilter' collect2: ld returned 1 exit status 解决方法如下: (1)tar –jxvf ...

    CentOS 5.5 FTP设置

    在本文中,我们将详细介绍如何在CentOS 5.5系统上配置vsftpd(Very Secure FTP Daemon)服务。vsftpd是一款广泛使用的、安全且高效的FTP服务器软件,它支持多种认证方式,并且能够通过多种配置选项来满足不同的需求...

    centos 5.5 32和64位 种子文件

    压缩包子文件的文件名称 "centos5.5" 暗示这个文件可能包含整个 CentOS 5.5 ISO 映像或者是一组ISO文件,用户可以使用这些文件来创建安装光盘或USB驱动,或者通过网络启动安装。 在CentOS 5.5中,你可以找到以下...

    LAMP在 CentOS5.5b上安装

    在CentOS 5.5b操作系统上安装LAMP涉及以下步骤: 一、准备工作 首先,确保系统具备必要的编译工具,如gcc、gcc-c++和make。这些工具可以通过`yum`包管理器安装。如果无法联网,可以使用安装光盘作为yum源。具体...

    Centos5.5下安装LAMP完整版

    本文将深入解析如何在CentOS 5.5环境下安装LAMP堆栈,以及相关组件的配置细节。 ### 一、系统环境准备 首先,确保你的系统是CentOS 5.5,这是一个基于Linux内核的开源操作系统。此版本发布于2010年,虽然现在已经...

    在centos5.5上lamp详细安装配置教程

    这个教程自己已经在centos5.5上一个个试出来的 包括lamp安装过程出现的问题都有记录,安装的步骤参考与别人的经验,我只是做了个总结及问题归总,用该文档我已经装好了好多台服务器了。 该文档包括apache的安装,php...

    Centos 5.5 DVD 种子

    Centos5.5 DVD终于出现了。欢迎大家下载!

    centOS5.5下java环境配置

    在CentOS 5.5操作系统上配置Java环境是开发或运行Java应用程序的基础步骤。下面将详细介绍这个过程,包括所需的软件包、编译工具以及Apache HTTP Server的安装,因为这些通常是与Java环境配置相关的。 首先,我们...

    Centos 5.5 X64

    在CentOS 5.5 X64环境中安装KVM,可以通过以下步骤进行: 1. **安装所需的软件包**: - 使用`yum`安装KVM相关组件,包括`kvm`、`kmod-kvm`、`qemu`、`kvm-qemu-img`、`virt-viewer`和`virt-manager`等。 ```bash...

    CentOS 5.5使用yum安装Apache+PHP+MySQL

    在本文中,我们将详细介绍如何在 CentOS 5.5 操作系统上使用 YUM 工具安装 Apache、PHP 和 MySQL,创建一个完整的 LAMP (Linux, Apache, MySQL, PHP) 服务器环境。 首先,确保您已经安装了 CentOS 5.5。这个版本...

    CentOS5.5命令行安装64位

    ### CentOS5.5命令行安装Oracle 10g详尽指南 #### 一、环境准备与验证 在开始安装Oracle 10g之前,确保满足以下条件: 1. **操作系统**:CentOS 5.5(64位) 2. **内存**:Oracle至少需要512MB的RAM,推荐更多 3....

Global site tag (gtag.js) - Google Analytics