Fedora 16 下编译 OpenJDK 7

自己的本本买来很长时间了 最近装了给国产山寨的micro Sata, 因此W520自己带的500G硬盘压力轻了不少。 i7的4核8线程跑跑win7 太对不起它了,  赶紧的虚拟机装个自己用的最多的Fedora( 现在的最新版本16)。

 

最近在看深入理解Java虚拟机,作者推荐下载OpenJdK来自己编译玩玩。主意不错,有了Linux 操作系统就不用在windows 下面还需要悲催的又要cgwin 又要visual studio 了。下面就是安装编译Openjdk的过程了:

 

1,   下载 打包好的 OpenJdk 源代码包:openjdk-7-fcs-src-b147-27_jun_2011.zip

 

2,   unzip  这个包。  我将它解压到  /root/openjdk  目录

 

3,    yum-builddep java-1.6.0-openjdk

     这是安装一个 jdk 6 在 /usr/lib/jvm/java-openjdk 这个位置。这个JDK 就是所谓的bootstrap jdk了. 因为在编译openjdk7 的时候java 部分的代码就是这个来编译的了。  当然c,c++部分是gcc 的干活。 


4, 根据zip包里面的 Readme-builds.html 提示设置 环境变量如下:

export LANG=C  

export ALT_BOOTDIR=/usr/lib/jvm/java-openjdk  

export ALLOW_DOWNLOADS=true  

export USE_PRECOMPILED_HEADER=true  

export SKIP_DEBUG_BUILD=false  

export SKIP_FASTDEBUG_BUILD=true  

export DEBUG_NAME=debug  

unset CLASSPATH  

unset JAVA_HOME          

 

5, 修改  /root/openjdk/hotspot/make/linux下的Makefile文件,注释掉以下内容,若不注释,会报错,然后exit 1退出编译. 这个原因是因为OpenJDK 在2011 大概6月份的时候就出来了, 而那个时候Fedora 16 还没有出来, 应该还没有在OpenJDK支持的版本里面。 下面这个错误其实也是在编译的时候碰到,然后试着注释掉

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

6, make sanity  

    如果出现 check sanity passed !

 

7,  make

 

需要说明的是  在gcc link hotspot 的时候 出现了一个错误

  ld can not find  libstdc++

 

大概是执行这个命令的时候  

 

   gcc -v -m64 -Xlinker -O1 -Wl,--hash-style=both  -Xlinker -z -Xlinker noexecstack -shared                                 \

               -Xlinker --version-script=mapfile_reorder -Xlinker -soname=libjvm.so  -static-libgcc -o libjvm.so ...\

  -Wl,-Bstatic \

  -lstdc++ -Wl,-Bdynamic -lm -ldl -lpthread;       \


...  表示的N多个 .o 文件。 我们可以看到 gcc 是要静态link    -lstdc++.   如果是静态的话 它应该是没有办法在 相关的lib下 找到 libstdc++.a   这个应该是fedora 16 在安装的时候 stdc++ 没有完全安装的缘故

试试   yum install libstdc++ - static

然后 执行   find /usr -name libstdc++.a

可以找到 /usr/lib/gcc/x86_64-redhat-linux/4.6.2/libstdc++.a
             /usr/lib/gcc/x86_64-redhat-linux/4.6.2/32/libstdc++.a


继续 执行 make, 终于看到 succss 的画面出现。 到build/linux-amd64/bin 下面执行

 ./java -version
openjdk version "1.7.0-internal-debug"
OpenJDK Runtime Environment (build 1.7.0-internal-debug-root_2012_03_11_21_31-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17-jvmg, mixed mode)

呵呵成功了, 以后在linux 就用这个jdk 来玩了。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值