最近重新编译了一下jdk,遇到了不少问题。特此记录。
openjdk,ant, linux-jdk我都放到网盘中了 ,具体地址 http://pan.baidu.com/s/1ntJkB5f
先说明一下我的环境(64位)
[zhenghui@localhost openjdk]$ cat /etc/issue Fedora release 20 (Heisenbug)
由于这个系统是临时装的,所以很多东西都没有(包括gcc,g++等)。编译的时候,反正就是在openjdk目录下运行
一个个错误排除解决吧。
1 安装gcc g++
make工具应该是默认安装的。如果没有,则直接 install make。
2 安装ALSA声卡驱动
由于jdk支持声音处理,所以需要安装0.9.1版本以上的ALSA驱动。
Please install ALSA (drivers and lib). You can download the
source distribution from http://www.alsa-project.org or go to
http://www.freshrpms.net/docs/alsa/ for precompiled RPM packages.
找了N多法子,最后发现解决办法很easy
呵呵
3 FreeType 字体错误
具体的问题如下:
make[2]: Entering directory `/home/zhenghui/software/openjdk/jdk/make/tools/freetypecheck'
解决方法是
4 do not have access to valid Cups header file
具体的错误如下
Please check your access to
/usr/include/cups/cups.h
and/or check your value of ALT_CUPS_HEADERS_PATH,
CUPS is frequently pre-installed on many systems,
or may be downloaded from http://www.cups.org
解决的方法是安装一个 cups-devel.。我是x86 64位的,所以
搞定。
环境变量设置:
##jdk路径设置
export ALT_BOOTDIR="/home/zhenghui/software/jdk1.7.0_45"
export ALT_JDK_IMPORT_PATH="/home/zhenghui/software/jdk1.7.0_45"
##ant路径设置
export ANT_HOME=/home/zhenghui/software/apache-ant-1.8.2
##允许自动下载
export ALLOW_DOWNLOADS=true
##设置编译的线程数,一般是设置成与cpu个数一样
export HOTSPOT_BUILD_JOBS=4
##编译结果存放路径
export ALT_OUTPUTDIR=/home/zhenghui/software/openjdk/build
##如果是64位系统
export ARCH_DATA_MODEL=64
##顺手取消两个环境变量设置
unset JAVA_HOME
unset CLASSPATH
环境和依赖看上去已经解决的差不多了。下面就直接到 /openjdk 下直接执行make命令就好了。慢慢等吧。
如果只是编译hotspot的话,那么直接在/openjdk/hostspot/make下执行
make jvmg jvmg1 2>&1 | tee $ALT_OUTPUTDIR/build.log
在编译的时候,遇到了一个很奇怪的问题
cannot find -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
ln: failed to create symbolic link 'libjvm_g.so': File exists
ln: failed to create symbolic link 'libjvm_g.so.1': File exists
解决了很久。网上的解决方案由于都不是针对编译jdk的,所以一直没找到法子。最后的解决办法是
最后编译成功。
由于我只是只是单独编译了hotspot,所以虚拟机的输出结果在
对应的目录有
total 48
drwxrwxr-x. 2 zhenghui zhenghui 4096 May 24 14:50 debug
drwxrwxr-x. 2 zhenghui zhenghui 4096 May 24 14:09 fastdebug
drwxrwxr-x. 7 zhenghui zhenghui 4096 May 24 11:56 generated
drwxrwxr-x. 3 zhenghui zhenghui 20480 May 24 14:52 jvmg
drwxrwxr-x. 2 zhenghui zhenghui 4096 May 24 11:56 optimized
drwxrwxr-x. 2 zhenghui zhenghui 4096 May 24 11:56 product
drwxrwxr-x. 2 zhenghui zhenghui 4096 May 24 11:56 profiled
上面我的命令只是编译jvmg版的hotspot。所以除了jvmg目录,其他目录下是没有hotspot的。
最后是通过gamma启动器来启动hotspot。直接启动的话,还是会抛错,
./gamma: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory
可以发现,其实在当前目录(也就是jvmg目录)就有对应的libjvm.so ,所以,修改 /etc/ld.so.conf 文件,把当前目录加进去。具体如下
include ld.so.conf.d/*.conf
/home/zhenghui/software/openjdk/build/linux_amd64_compiler2/jvmg
然后别忘了执行 ldconfig 命令让上面的修改生效。
再次运行
JAVA_HOME must point to a valid JDK/JRE to run gamma
Error: could not find libjava.so
Error: could not find Java 2 Runtime Environment.
这个问题解决就很容易了。
[zhenghui@localhost jvmg]$ echo $JAVA_HOME
/home/zhenghui/software/jdk1.7.0_25
[zhenghui@localhost jvmg]$ ./gamma -version
Using java runtime at: /home/zhenghui/software/jdk1.7.0_25/jre
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
OpenJDK 64-Bit Server VM (build 24.0-b56-internal-jvmg, mixed mode)
bingo!
-----------------------分割线,下面是三年前的记录------------------------------
自己在ubuntu上装的.按照撒加的http://rednaxelafx.iteye.com/blog/875957 文章.中间记录一些问题.
1 在解压jdk-6u23-fcs-src-b05-jrl-12_nov_2010.jar 与 jdk-6u23-fcs-bin-b05-jrl-12_nov_2010.jar这两个文件的时候
感谢撒迦的帮助..
2 在检查编译环境正确性的时候 也就是
$ make dev-sanity BUILD_DEPLOY=false SKIP_COMPARE_IMAGES=true ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk ALT_DEVTOOLS_PATH=/usr/bin HOTSPOT_BUILD_JOBS=2
的时候.编译发生错误fatal error: alsa/asoundlib.h: No such file or directory错误
解决的方法是
apt-get install libasound2-dev