centos6.5编译open-jdk

来源:互联网 发布:mac os 显示隐藏文件 编辑:程序博客网 时间:2024/06/07 08:00

准备工作

环境

[java] view plain copy
  1. $ cat /etc/redhat-release   
  2. CentOS release 6.5 (Final)  

open-jdk

因为版权原因以及各种因素,只能编译open-jdk。
下载页:
https://jdk7.java.net/source.html
下载:
[java] view plain copy
  1. wget http://download.java.net/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip?q=download/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip  

注:以上命令可能失效。可自行去页面寻找连接。

准备完成

[java] view plain copy
  1. $ mv openjdk-7u40-fcs-src-b43-26_aug_2013.zip\?q\=download%2Fopenjdk%2Fjdk7u40%2Fpromoted%2Fb43%2Fopenjdk-7u40-fcs-src-b43-26_aug_2013.zip  openjdk.zip  
  2. $ ls  
  3. openjdk.zip  

开始编译

编译前准备

[java] view plain copy
  1. make sanity  
这途中会报很多的错,基本情况是看到缺什么就安装什么。大家可以参考这些博客:

http://blog.csdn.net/dongdong9223/article/details/39228749
http://chenjingbo.iteye.com/blog/1117021
https://today.java.net/pub/a/today/2007/11/29/building-the-jdk.html

这儿列出几条:

①You seem to not have installed ALSA 0.9.1 or higher
[java] view plain copy
  1. $ sudo yum install alsa-lib-devel.x86_64  

②FreeType version  2.3.0  or higher is required.
哪怕是版本没问题也把它卸载了重新装一次:
[java] view plain copy
  1. $ rpm -qa | grep freetype  
  2. freetype-2.3.11-14.el6_3.1.x86_64  
  3. $ sudo rpm -e --nodeps freetype-2.3.11-14.el6_3.1.x86_64  
  4. $ sudo yum install freetype-devel.x86_64  
  5.           

③第三个可能会报JAVA_HOME, CLASSPATH问题。unset即可。

④如果是yum安装的各种东西就不必设置。否则:
[java] view plain copy
  1. $ export ALT_BOOTDIR=${JAVA_HOME}  
  2. $ export ANT_HOMR=${ANT_HOME}  
这样一些安装了的环境变量都给加上。
此处强烈建议:使用 sun jdk并配环境变量。 使用apache-ant并配环境变量。其余的全部yum即可

You do not have access to valid Cups header files. 
       Please check your access to 
           /usr/include/cups/cups.h

[java] view plain copy
  1. $ sudo yum install cups-devel  


看到这个的时候就可以开始编译了:
[java] view plain copy
  1. Sanity check passed.  

编译

[java] view plain copy
  1. make  
这将是一个极其漫长的过程。当前环境为单核单核心1G.
他将会编译hotspot  jdk  等等。

这儿我出了不少问题,谷歌良久,特来分享。(感觉处理过程特机智)

①could not locate 'libjvm.so'.  reason: Too many levels of symbolic links
[java] view plain copy
  1. Linking vm...  
  2. collect2: ld terminated with signal 9 [Killed]  
  3. ln: accessing `libjvm.so.1': Too many levels of symbolic links  
  4. /usr/bin/objcopy --only-keep-debug libjvm.so libjvm.debuginfo  
  5. /usr/bin/objcopy: Warning: could not locate 'libjvm.so'.  reason: Too many levels of symbolic links  
  6. make[6]: *** [libjvm.so] Error 1  
  7. make[6]: Leaving directory `/opt/open-jdk/openjdk/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product'  
  8. make[5]: *** [the_vm] Error 2  
  9. make[5]: Leaving directory `/opt/open-jdk/openjdk/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product'  
  10. make[4]: *** [product] Error 2  
  11. make[4]: Leaving directory `/opt/open-jdk/openjdk/build/linux-amd64/hotspot/outputdir'  
  12. make[3]: *** [generic_build2] Error 2  
  13. make[3]: Leaving directory `/opt/open-jdk/openjdk/hotspot/make'  
  14. make[2]: *** [product] Error 2  
  15. make[2]: Leaving directory `/opt/open-jdk/openjdk/hotspot/make'  
  16. make[1]: *** [hotspot-build] Error 2  
  17. make[1]: Leaving directory `/opt/open-jdk/openjdk'  
  18. make: *** [build_product_image] Error 2  
情况一:
网上报这个的缘故是gcc没装完全的缘故。装一个完整的包就行了。(值得一试)
另如果遇到依他问题可以去单独编译某个组件(hotspot)。再看看报错并对应解决。
情况二:
到哪个目录去看,看有没有哪个文件,一般情况都没有,于是可以机智的 
[java] view plain copy
  1. rm livjvm.so  
  2. rm livjvm.so.1  
  3. ln -s livjvm.so ${JAVA_HOME}/jre/lib/amd64/server/libjvm.so  
  4. ln -s livjvm.so.1 ${JAVA_HOME}/jre/lib/amd64/server/libjvm.so  
简直觉得这方法屌到爆。

②Cant`t find /usr/include/sys/sdt.h。

这个也是谷歌良久。创造性的做了一个更机智的做法:
谷歌苹果开源的sdt.h
http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/osfmk/mach/machine/sdt.h?txt
[java] view plain copy
  1. $ sudo vim /usr/include/sys/sdt.h  
粘贴进去

③time is more than 10 years from present: 1104530400000
这个只需要改个时间就可以了:
CurrencyData.properties
TURKEY =>改时间

完成

最后完成的结果是这个样子的:
[java] view plain copy
  1. $ bin/java -version  
  2. java version "1.7.0_0"  
  3. OpenJDK Runtime Environment (build 1.7.0-b36)  
  4. OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)  
总结一下:
编译open-jdk之前有一个准备工作:安装各类依赖,配置各种环境。这个环节很简单,不懂得直接google就可以了。需要的直接yum install就可以了。
编译的时候会出很多的问题,最大的问题在于编译hotspot上。
这个时候不妨放弃编译整个环境而单独去编译jvm.会遇到很多的问题,大部分问题多在google上搜索一下便可得知。少部分问题实在查不出缘故,就可以自己去看日志,或者是自己去看脚本,跟着debug一下。一般情况下日志能说明不少的问题;一个错误信息可能并不是根错误信息。

等到能自行编译成功了,就可以手动去修改它的源码,让他跟自己所想的一样啦。加油!
原创粉丝点击