在CentOS下编译OpenJDK6过程

openjdk-6.tar.gz openjdk-6,linux版本的openjdk-6,失传已久的openjdk 立即下载

由于初次手动编译OpenJDK6, 踩的坑还不少, 各种依赖不足以及奇葩的事情, 特此整理记录, 给后人防坑.
编译环境信息:

[root@dev-52 ~]# uname -a
Linux dev-52 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@dev-52 openjdk6]# arch && cat /etc/centos-release 
x86_64
CentOS release 6.2 (Final)
[root@dev-52 openjdk6]# nproc 
8
[root@dev-52 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          7872       7695        176          0        158       6794
-/+ buffers/cache:        742       7129
Swap:         5823          0       5823

OpenJDK版本: openjdk-6-src-b27-26_oct_2012.tar.gz
下载地址: https://java.net/projects/openjdk6/downloads/

[root@dev-52 ~]# mkdir openjdk6 && tar xf openjdk-6-src-b27-26_oct_2012.tar.gz -C openjdk6
[root@dev-52 ~]# ll openjdk6
總計 320
-rw-rw-r-- 1 uucp 143   1503 2012-10-27 02:21 ASSEMBLY_EXCEPTION
drwxrwxr-x 4 uucp 143   4096 2012-10-27 02:28 corba
-rw-rw-r-- 1 uucp 143   1373 2012-10-27 02:21 get_source.sh
drwxrwxr-x 6 uucp 143   4096 2012-10-27 02:28 hotspot
drwxrwxr-x 5 uucp 143   4096 2012-10-27 02:28 jaxp
drwxrwxr-x 5 uucp 143   4096 2012-10-27 02:28 jaxws
drwxrwxr-x 5 uucp 143   4096 2012-10-27 02:28 jdk
drwxrwxr-x 5 uucp 143   4096 2012-10-27 02:29 langtools
-rw-rw-r-- 1 uucp 143  19263 2012-10-27 02:21 LICENSE
drwxrwxr-x 4 uucp 143   4096 2012-10-27 02:28 make
-rw-rw-r-- 1 uucp 143  14485 2012-10-27 02:21 Makefile
-rw-rw-r-- 1 uucp 143   1803 2012-10-27 02:21 README
-rw-rw-r-- 1 uucp 143 101427 2012-10-27 02:21 README-builds.html
-rw-rw-r-- 1 uucp 143   4807 2012-10-27 02:21 ReleaseProcess.html
drwxrwxr-x 2 uucp 143   4096 2012-10-27 02:28 test
-rw-rw-r-- 1 uucp 143 127498 2012-10-27 02:21 THIRD_PARTY_README
-rw-rw-r-- 1 uucp 143   2113 2012-10-27 02:21 TRADEMARK

# 安装依赖, 编译OpenJDK需要先安装一个JDK, 无论是OpenJDK还是Oracle JDK都行
[root@dev-52 ~]# yum install java-1.6.0-openjdk alsa-lib-devel gawk binutils libpng-devel freetype-devel openmotif openmotif-devel cups-devel ant libXtst-devel -y

# 将编译参数全部写到一个脚本中
[root@dev-52 openjdk6]# cd openjdk6
[root@dev-52 openjdk6]# vim build.sh 
#!/bin/bash

export OPENJDK_HOME=/root/openjdk6 # 解压的源码包位置
export LANG=C
export ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk.x86_64 # 机器上现有的JDK位置, 下面一样
export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-1.6.0-openjdk.x86_64
export ALT_OUTPUTDIR=$OPENJDK_HOME/build # 编译输出目录
export ALLOW_DOWNLOADS=true
export HOTSPOT_BUILD_JOBS=8 # 编译线程数, 与CPU核数一致即可
export ALT_PARALLEL_COMPILE_JOBS=8
export DEV_ONLY=true
export USE_PRECOMPILED_HEADER=true

export BUILD_LANGTOOLS=true
export BUILD_JAXP=false # 下面三个组件编译时需要从网络上下载相关依赖包, 耗时较长且对于作者没有任何用处就取消编译了
export BUILD_JAXWS=false
export BUILD_CORBA=false
export BUILD_HOTSPOT=true
export BUILD_JDK=true

export BUILD_DEPLOY=false # 取消构建部署和安装包
export BUILD_INSTALL=false
unset JAVA_HOME
unset CLASSPATH

make sanity # 验证

[root@dev-52 openjdk6]# chmod +x build.sh 
[root@dev-52 openjdk6]# ./build.sh 
# 由于输出内容过长占用篇幅较大就不完全贴出来了, 尾部的输出如下:
WARNING: You are not building the JAXP sources.
         The jaxp files will be obtained from 
         the location set in ALT_JDK_IMPORT_PATH. 

WARNING: You are not building the JAXWS sources.
         The jaxws files will be obtained from 
         the location set in ALT_JDK_IMPORT_PATH. 

WARNING: You are not building the CORBA sources.
         The corba files will be obtained from 
         the location set in ALT_JDK_IMPORT_PATH. 

WARNING: Your build environment has the variable DEV_ONLY
         defined. This will result in a development-only
         build of the JDK, lacking the documentation
         build and installation bundles.

Sanity check passed. # 检查通过

# 修改build.sh的最后一行为如下, 然后在此执行脚本: 
make sanity && make 2>&1 | tee $ALT_OUTPUTDIR/build.log
[root@dev-52 openjdk6]# ./build.sh 

# 自2015年开始一般会出现如下异常
/opt/jdk1.6.0_31/bin/java  -Xmx896m -Xms128m -XX:PermSize=32m -XX:MaxPermSize=160m -jar /root/openjdk6/build/btjars/generatecurrencydata.jar -o /root/openjdk6/build/lib/currency.data.temp \
                < ../../../src/share/classes/java/util/CurrencyData.properties
Error: time is more than 10 years from present: 1120165200000
java.lang.RuntimeException: time is more than 10 years from present: 1120165200000
        at build.tools.generatecurrencydata.GenerateCurrencyData.makeSpecialCaseEntry(GenerateCurrencyData.java:285)
        at build.tools.generatecurrencydata.GenerateCurrencyData.buildMainAndSpecialCaseTables(GenerateCurrencyData.java:225)
        at build.tools.generatecurrencydata.GenerateCurrencyData.main(GenerateCurrencyData.java:154)
make[4]: *** [/root/openjdk6/build/lib/currency.data] Error 1
# 通过修改CurrencyData.properties文件, 把10年之前的时间修改为10年之内即可

# 部分amd64架构的机器可能会出现如下异常
cd linux_amd64_compiler2/product && ./test_gamma
java full version "1.6.0_36-b36"
./gamma: relocation error: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64/jre/lib/amd64/libjava.so: symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
# 主要是由于OpenJDK的一个bug导致的, 把OpenJDK替换为Oracle JDK即可, 注意同时修改build.sh中的内容

[root@dev-52 openjdk6]# vim `find . -name 'CurrencyData.properties'`
# 编译完成后末尾输出如下, 也可检查程序的退出码:
>>>Making sec-files-win @ Mon Sep  7 15:06:20 CST 2015 ...
>>>Making jgss-files @ Mon Sep  7 15:06:20 CST 2015 ...
>>>Finished making images @ Mon Sep  7 15:06:20 CST 2015 ...
make[2]: Leaving directory `/root/openjdk6/jdk/make'
make[1]: Leaving directory `/root/openjdk6'
Control linux amd64 1.6.0-internal build_product_image build finished: 15-09-07 15:06
Control linux amd64 1.6.0-internal all_product_build build finished: 15-09-07 15:06
Control linux amd64 1.6.0-internal all build finished: 15-09-07 15:06
[root@dev-52 openjdk6]# echo $?
0
# 退出码为0说明程序正常退出, 编译成功进入输出目录的j2sdk-image下, 即可看到编译好的JDK了
[root@dev-52 openjdk6]# cd build/j2sdk-image/bin
[root@dev-52 j2sdk-image]# ls
ASSEMBLY_EXCEPTION  bin  demo  include  jre  lib  LICENSE  man  sample  src.zip  THIRD_PARTY_README
[root@dev-52 bin]# ./java -version
openjdk version "1.6.0-internal"
OpenJDK Runtime Environment (build 1.6.0-internal-root_07_sep_2015_14_49-b00)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

到此整个编译过程就结束了, 当然第一次编译肯定不会这么顺利的完成, 操作时需要细心, 当然编译OpenJDK7也是大同小异, 在debain平台下依赖包的名字可能会有差异, 这需要注意一下.
OK, 对JVM感兴趣的同学赶紧亲自动手试一下吧.


参考资料

openjdk1.6 OpenJDK1.6的源码,有JDK源码和部分JDK未公开的源码,值得学习 立即下载

相关推荐

openjdk6-sourcecode

Openjdk6 update24源代码!

编译openjdk6

晚上试了下手工编译openjdk6。 从[url]http://download.java.net/openjdk/jdk6/[/url]下载源码解压到openjdk6。我编译用的OS是ubuntu11.04,参考源代码根目录下的README-builds.html中Ubuntu 9.04的说明,首先安装openjdk-6: [code="shell"]sudo apt-get install...

better java 455

openjdk-1.6.0-unofficial-b27-windows-amd64.zip

openjdk-1.6.0-unofficial-b27-windows-amd64原版,zip文件,下载后直接install。

OpenJDK 6b18可用

现在可以下载OpenJDK 6的Build b18 。 OpenJDK 6旨在提供Java Standard Edition 6 Platform的开源实现,其代码库不同于JDK 7和6更新系列的代码库。 大多数OpenJDK代码是根据GNU通用公共许可证版本2(GPLv2)发布的。 翻译自: https://jaxenter.com/openjdk-6b18-available-100...

186

【ESP32】1.编译、烧录、创建工程

本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。

梁山1号 1478

代号OneNET02 STM32+ESP8266 WIFI系列-第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级

第2节-STM32单片机通过ESP8266连接WIFI访问OneNET OTA服务器实现SOTA远程程序升级,这一节主要是实现通过OneNET OTA服务器将需要更新的程序远程下载到STM32单片机,这一节主要是引导程序和应用程序的讲解。

weixin_44862509的博客 1894

FREEBSD 装 openjdk6

目前我们已经安装成功了apache和php,这样已经可以正常运行html的php的网页的,但是java创建的web程序还是没法运行的,所以我们得安装tomcat或者jboss服务器。为此,需要先安装JDK。 找不到需要的port所在的位置,可以去http://www.freebsd.org/ports/搜索,输入openjdk,可以看到 OpenJDK6位于ports/java/openjd

逆雪寒的天坑 1988

RK3588开发板RKNPU2环境部署实战:更新rknn_server与librknnrt.so详解

本文详细介绍了在RK3588开发板上更新rknn_server与librknnrt.so核心组件的完整实战流程。通过adb工具推送文件、设置权限并执行同步操作,确保RKNPU2环境部署成功,从而解决推理速度慢或初始化失败等问题,提升AI模型运行效率与稳定性。

weixin_29194817的博客 325

CentOS6.5 x86_64 编译 openJDK8u

前期根据网上教程以及书籍资料,编译openJDK一直碰壁,编译错误层出不穷,迫于无奈,只能直面自己的懒惰,自己亲自阅读官网资料。 官方编译JDK的教程 官方编译JDK8的教程 编译环境 操作系统:CentOS6.5 x86_64 (带桌面版) 编译目标 openJDK 8u 一、获取源码 推荐获取源码网站,可以直接选择自己预编译的jdk版本下载。例如,下载JDK8u源码时,应该进入的最终...

水丸的博客 2688

STM32 伺服电机 指令脉冲+方向位置控制模式 主从定时器 实现PWM脉冲数精确控制

实验室有个项目涉及到多个步进电机以及伺服电机的控制,需要电机得到一个触发信号后精确移动一段距离。 下面以单个伺服电机控制为例,利用伺服电机的指令脉冲加方向位置控制模式实现jing'que ...

phcdd的博客 2万+

2026款拯救者Y9000P深度学习环境配置指南

这套环境适配 2026 款拯救者 Y9000P 的 RTX5060,可直接用于 CV(图像分类、检测)、NLP 等 PyTorch 深度学习任务,GPU 利用率正常,无兼容性问题。后续复现环境时,直接按本文步骤操作即可~

大糊涂虫 2628

centos6.9 编译openJdk源码

仿照《深入理解Java虚拟机:JVM高级特性与最佳实践》编译openJdk源码 Linux系统 CentOS release 6.9 (Final) Kernel \r on an \m Bootstrap JDK java-1.6.0-openjdk-1.6.0.41.x86_64 源码 openjdk-7...

weixin_34092455的博客 70

Unity四部曲(核心)

需要先改成Cube复杂的展开留到unity进阶再说。

ultraman1234566的博客 2791

Linux环境编译安装OpenJDK

Centos6.5 AMD64位机器 Java的源码是C,C++和Java实现的,所以还需要有一个安装好的java建议选OracleJDK参考文末 安装OracleJDK Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序 安装依赖 | Install dependence # yum -y install gcc gcc-c++ alsa-lib als

编程的本质是数学问题 4265

相位编码脉冲压缩信号的理论研究与 Matlab 实现

通过实际的代码示例,我们展示了如何生成信号、进行相位编码、传输信号、相位解码和脉冲压缩的步骤。相位编码脉冲压缩信号是通过在发射端对信号进行相位编码,并在接收端对信号进行相位解码来实现的。其主要原理是在发射端将信号的频率进行调制,使得信号具有宽带特性,然后在接收端通过匹配滤波器对信号进行解调和压缩,从而提高信号的分辨率和抗干扰能力。相位编码脉冲压缩信号是一种在信号处理中常用的技术,用于提高信号的分辨率和抗干扰能力。可以使用 Matlab 中的信号生成函数生成一个宽带脉冲信号,例如矩形脉冲信号或高斯脉冲信号。

CyberWizarDD的博客 898

晶体管-二极管三极管MOS管选型参数总结

二极管三极管和MOS管,是电路中常用的控制电流电压的基本电子元器件。电路世界中晶体管的选型,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对二极管三极管和MOS管的选型参数进行详细介绍并总结。

fydar的博客 876

Centos6.5编译openjdk7

一、环境准备 1、Centos6.5:VMware上面安装Centos6.5,可以联网用来下载,需要注意内存最好要大于1G,我设置的为2G,之前设置的512M内存,编译源码时出现各种问题; 2、apache-ant-1.7.1-bin.zip :下载地址:http://archive.apache.org/dist/ant/binaries/,或者https://pan.baidu.com/s...

梦想还是要有的,万一实现了呢! 1506

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入理解Java虚拟机 CentOS编译OpenJDK源码总结

首先楼主是在CentOS 6.5的版本进行编译的 其它版本会有些差异 建议使用CentOS编译的进行参考 1.安装mercurial 先更新list sudo yum update 安装mercurial sudo yum install mercurial 验证安装成功 hg命令显示帮助信息 hg 2.下载OpenJDK源码 hg clone http://hg.openjdk.j...

勤劳的搬运工 1048

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CentOS 6.5 编译 openJDK

网上有很多关于编译openJDK的文章,不过这是我第一次成功的编译openJDK,记下来以备后用! 其实我在使用Cent OS编译之前,我曾用ubuntu14.04编译过,但是出现很多错误,然后百度了一下好像是因为内核版本太高,我并没有深究;然后我就用CentOS 6.5编译了一下,一次成功,简直不敢相信会这么顺利... 基本步骤如下: 1. 下载软件包: http://downlo

路在脚下 2644

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

CentOS 6.5 编译OpenJDK7源码

一、准备工作 1、apache-ant-1.7.1-bin.tar.gz 2、freetype-2.5.5.tar.gz 3、openjdk-7u40-fcs-src-b43-26_aug_2013.zip 4、jdk-6u45-linux-x64.bin 二、安装jdk必备软件包 配置更新源 cd /etc/yum.repos.d/ curl http://mirrors.163.com/.he...

杨潇弈的博客 275

CentOS6.5上编译OpenJDK7源码

采用开源的OpenJDK版本,获取其源码的方式有两种: 通Mercurial代码版本管理工具从Repository中直接取得源码,但是速度太慢,需要花费数小时 直接下载官方打包好的源码包(推荐) 下载源码openjdk-7u6-fcs-src-b24-28_aug_2012.zip,解压,下载地址如下: http://www.java.net...

weixin_34409741的博客 92

Linux环境编译jvm源码openjdk

java是一门深受大家欢迎的语言,其最大的优点是其jvm虚拟机封装了便捷的内存管理机制以及垃圾收集策略,这一部分也正是java的核心部分。要想了解其工作原理,我们必须下载jvm的源码,对其编译。源码我们可以使用开源的openjdk,openjdk与Oracle的jdk差别很小。环境最好使用Linux或者Mac OS。接下来我记录了自己在Linux上编译openjdk的过程以及期间遇到的问题和解决方法,拿出来和大家分享。

Roy_70的专栏 5069

Openjdk8编译过程

最近在看JVM相关教程, 由于资源过于老旧,走了好多坑,这里记录一下自己的编译过程. 1. 准备 自己是在VirtualBox虚拟linux系统来操作的, 运行还是有点卡. 听过Docer运行会好一点,没试过,有兴趣的可以尝试. 另外还有在windows上折腾的,这个更加复杂, 资料...

chuiaodi2681的博客 193

Centos上手动编译OpenJDK7源码

本文包括4部分内容: 1.基本流程(阅读README和README-builds.html) 2.安装基础软件包 3.配置变量 4.检查环境是否配置ok与编译jdk源码 下载源码openjdk-7u6-fcs-src-b24-28_aug_2012.zip,解压 1.基本流程 阅读解压出来的 README和README-builds.html

小老虎的专栏 2307

在CentOS5.5上编译OpenJDK6

几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。 0. OpenJDK介绍 OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点: 1、它的核心代码与同时期Sun(-&gt; Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异...

Stay hungry, stay foolish. 237
上一篇: 使用MinGW搭建windows下C/C++开发环境
下一篇: 多种方式(含docker容器)实现零停机时间(Zero-Downtime)部署
萧易客
博客等级 码龄14年 34粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值