`
chenjingbo
  • 浏览: 455963 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自己编译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

 

 

 

分享到:
评论

相关推荐

    WeiboSdkDemo:这是新浪微博 Android SDK Demo 使用 Android Studio 导入、编译并运行通过的版本

    说明在使用 Android Studio 导入新浪微博 SDK 时,遇到了一些问题,通过查看官方项目的 Issues 及 Google 后终于将问题解决,记录下来仅供参考。运行环境Android Studio 1.2.1.1Android SDK 22JDK 1.7Gradle 2.2.1请...

    ttdeploy:teamtalk部署问题

    ttdeploy记录teamtalk在部署过程中遇到的问题,仅供大家参考这里只是 TTAutoDeploy 的补充, 所以请安装前仔细阅读TTAutoDeploy,尤其是红色标注的“强烈建议”, TTAutoDeploy中说明过的这里不再重复由于缺少Android,...

    WeiBoSdkDemo

    说明在使用 Android Studio 导入新浪微博 SDK 时,遇到了一些问题,通过查看官方项目的 Issues 及 Google 后终于将问题解决,记录下来仅供参考。运行环境Android Studio 1.2.1.1Android SDK 22JDK 1.7Gradle 2.2.1请...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.3.2 编译自己的HelloWorld程序 11 1.3.3 让代码运行起来 13 1.4 初探Hello World 14 1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.3.2 编译自己的HelloWorld程序 11 1.3.3 让代码运行起来 13 1.4 初探Hello World 14 1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的...

    jdbc基础和参考

    提供预编译的功能,某种程度上可以避免sql注入的问题 4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常 CallableStatement:主要用来执行...

    iuhyiuhkjh908u0980

    最近在部署应用时,遇到一个问题,就是ant脚本登录到linux机器上执行部署命令时,不知如何去写脚本。不知有没有哪位同学做过?以下是我的ant脚本: <project name="taxs_Admin" default="usage"> ...

    java 面试题 总结

    Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method...

    超级有影响力霸气的Java面试题大全文档

    Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method...

    JAVA面试题最全集

    37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41....

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics