自己编译JDK的时候遇到的问题记录

最近重新编译了一下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目录下运行

写道
[zhenghui@localhost openjdk]$ make sanity

 一个个错误排除解决吧。

 

 

1 安装gcc g++ 

写道
sudo yum install gcc-c++ libstdc++-devel

 make工具应该是默认安装的。如果没有,则直接 install make。

 

2 安装ALSA声卡驱动

由于jdk支持声音处理,所以需要安装0.9.1版本以上的ALSA驱动。

写道
ERROR: You seem to not have installed ALSA 0.9.1 or higher.
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

写道
sudo yum install alsa*

 呵呵

 

3 FreeType 字体错误

具体的问题如下:

写道
ERROR: FreeType version 2.3.0 or higher is required.
make[2]: Entering directory `/home/zhenghui/software/openjdk/jdk/make/tools/freetypecheck'

 解决方法是

写道
[zhenghui@localhost openjdk]$ sudo yum install freetype.x86_64 freetype-devel.x86_64

 

4 do not have access to valid Cups header file

具体的错误如下

写道
ERROR: You do not have access to valid Cups header files.
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位的,所以

写道
[zhenghui@localhost openjdk]$ sudo yum install cups-devel.x86_64

 搞定。

 

环境变量设置:

写道
export LANG=C
##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下执行

 

 

写道
##编译jvmg版本的jdk。
make jvmg jvmg1 2>&1 | tee $ALT_OUTPUTDIR/build.log

 

在编译的时候,遇到了一个很奇怪的问题 

cannot find -lstdc++

 

写道
Linking vm...
/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的,所以一直没找到法子。最后的解决办法是

写道
sudo yum install libstdc++-static.x86_64

 最后编译成功。

 

由于我只是只是单独编译了hotspot,所以虚拟机的输出结果在 

写道
/home/zhenghui/software/openjdk/build/linux_amd64_compiler2

 对应的目录有

写道
[zhenghui@localhost linux_amd64_compiler2]$ ll
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。直接启动的话,还是会抛错,

写道
[zhenghui@localhost jvmg]$ ./gamma
./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  文件,把当前目录加进去。具体如下

写道
[zhenghui@localhost linux_amd64_compiler2]$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/home/zhenghui/software/openjdk/build/linux_amd64_compiler2/jvmg

 

 然后别忘了执行 ldconfig 命令让上面的修改生效。

再次运行

写道
[zhenghui@localhost jvmg]$ ./gamma -version
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]$ export JAVA_HOME=/home/zhenghui/software/jdk1.7.0_25
[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这两个文件的时候

RednaxelaFX 写道
你在解压源码JAR的时候一定要有X支持的图形界面,否则它就无法解压。例如说如果你简单的通告ssh连接到远程服务器去做这个解压就会失败,因为那样连接只要字符界面而没有图形界面。

 

感谢撒迦的帮助..

 

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

 

 

 

你可能感兴趣的:(jdk)