首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Fedora 16 上编译 OpenJDK 7

2012-09-19 
Fedora 16 下编译 OpenJDK 7自己的本本买来很长时间了 最近装了给国产山寨的micro Sata, 因此W520自己带的

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:??#ifeq?($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),)??
  2. #???$(QUIETLY)?>&2?echo?"***?This?OS?is?not?supported:"?`uname?-a`;?exit?1;??#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 -versionopenjdk 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 来玩了。 ?

热点排行