zoukankan      html  css  js  c++  java
  • 信步漫谈之JDK—源码编译

    一、环境

    Linux 系统:CentOS_6.5_x86_64

    JDK 安装包:jdk-7u80-linux-x64.rpm

    OpenJDK 源码包:OpenJDK7

         下载路径:http://download.java.net/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip

    ANT 安装包:apache-ant-1.8.3-bin.zip

         下载路径:http://archive.apache.org/dist/ant/binaries/apache-ant-1.8.3-bin.zip

    网络环境:联网,因为有些包需要 yum 下载

    二、操作步骤

    1)安装必要的软件
    安装 jdk-7u80-linux-x64.rpm(命令:rpm -ivh jdk-7u80-linux-x64.rpm)
    安装 ant,步骤如下:
         ①解压(命令:unzip apache-ant-1.8.3-bin.zip)
         ②把解压出来的文件夹移动到预期的安装目录
         ③配置环境变量,打开 /etc/profile 文件,添加 ant 环境变量的配置,如下:
         clipboard
         ④更新配置文件(命令:source /etc/profile)
         ⑤查看是否安装正常(命令:ant -version)

    2)上传OpenJDK源码包,可上传到任意目录(例如:/tmp/jdkBuild),并解压(命令:unzip openjdk-7-fcs-src-b147-27_jun_2011.zip)

    3)配置环境变量

    #语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
    export LANG=C
    
    #Bootstrap JDK的安装路径。必须设置
    export ALT_BOOTDIR=/usr/java/jdk1.7.0_80
    export ALT_JDK_IMPORT_PATH=/usr/java/jdk1.7.0_80
    
    #ant路径设置
    export ANT_HOME=/opt/apache-ant-1.8.3
    
    #允许自动下载依赖
    export ALLOW_DOWNLOADS=true
    
    #并行编译的线程数,设置为和CPU内核数量一致即可
    export HOTSPOT_BUILD_JOBS=6
    export ALT_PARALLEL_COMPILE_JOBS=6
    
    #比较本次 build 出来的映像与先前版本的差异。这对我们来说没有意义
    #必须设置为 false,否则 sanity 检查会报缺少先前版本JDK的映像的错误提示
    #如果已经设置 dev 或者 DEV_ONLY=true ,这个不显式设置也行
    export SKIP_COMPARE_IMAGES=true
    
    #使用预编译头文件,不加这个编译会慢一些
    export USE_PRECOMPILED_HEADER=true
    
    #要编译的内容
    export BUILD_LANGTOOLS=true
    #export BUILD_JAXP=false
    #export BUILD_JAXWS=false
    #export BUILD_CORBA=false
    export BUILD_HOTSPOT=true
    export BUILD_JDK=true
    
    #要编译的版本
    #export SKIP_DEBUG_BUILD=false
    #export SKIP_FASTDEBUG_BUILD=true
    #export DEBUG_NAME=debug
    
    #把它设置为 false 可以避开 javaws 和浏览器 Java 插件之类的部分的 build
    BUILD_DEPLOY=false
    
    #把它设置为 false 就不会 build 出安装包。因为安装包里有些奇怪的依赖
    #但即便不 build 出它也已经能得到完整的 JDK 映像,所以还是别 build 它好了
    BUILD_INSTALL=false
    
    #编译结果所存放的路径
    export ALT_OUTPUTDIR=/tmp/jdkBuild/build
    
    #这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些"诡异的事情",Makefile脚本检查到有这 2 个变量就会提示警告)
    unset JAVA_HOME
    unset CLASSPATH

    4)进入OpenJDK源码目录,检查配置是否全部正确(命令:make sanity),检查成功,效果如下:
    clipboard

    5)开始编译(命令:make 2>&1 | tee $ALT_OUTPUTDIR/build.log)

    6)编译成功效果图
    clipboard

    三、问题解决

    1) make sanity 提示 check your value of ALT_CUPS_HEADERS_PATH
    clipboard
    原因:缺少cups-devel
    解决方式:安装 cups-devel (命令:yum install cups-devel.x86_64)

    2) yum 安装提示 Couldn't resolve host
    clipboard
    原因:域名解析服务器未配置
    解决方式:
    方式一:(重启系统或网络服务后,修改会丢失)打开文件 /etc/resolv.conf ,添加域名服务器的地址配置
    clipboard
    方式二:(永久修改)打开 linux 的网络配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0,添加如下配置,重启系统或重启网络服务(命令:service network restart)
    clipboard

    3)yum 安装提示 The requested URL returned error: 404 Not Found
    clipboard
    原因:系统下载文件的时候识别到的 releasever 错误
    解决方式:打开文件 /etc/yum.repos.d/CentOS-Base.repo ,修改 baseurl 值
    clipboard

    4) make sanity 提示 FreeType version 2.3.0 or higher is required
    clipboard
    原因:freetype 字体错误
    解决方式:安装 freetype(命令:yum install freetype.x86_64 freetype-devel.x86_64)

    5) make sanity 提示 The version of ant being used is older
    clipboard
    原因:未安装 ant 或 ant 版本太低
    解决方式:安装 ant,见上方步骤

    6) make sanity 提示 You seem to not have installed ALSA 0.9.1 or higher
    clipboard
    原因:缺少alsa的包
    解决方式:安装alsa的包(命令:yum install alsa*)

    7)make 编译提示 Redirection detected from https to http. Protocol switch unsafe, not allowed
    clipboard
    原因:在这个build-drop-jaf_src.xml的96行中获取包下载的地址失效或有问题,就会导致改问题发生,这时你需要把那些包自己下载,主要是jdk7-jaf-2010_08_19.zip这个包下载不了
    解决方式:
    ①下载依赖的jaxp、jaf、jaxws
    jaxp145_01.zip: http://download.java.net/jaxp/1.4.5/jaxp145_01.zip 
    jdk7-jaxws2_2_4-b03-2011_05_27.zip: http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7/jdk7-jaxws2_2_4-b03-2011_05_27.zip 
    jdk7-jaf-2010_08_19.zip:https://netix.dl.sourceforge.net/project/jdk7src/input-archives/jdk7-jaf-2010_08_19.zip 
    ②进入openjdk源码目录,创建drop文件夹(命令:mkdir drop),移动三个包到drop目录下
    ③配置环境变量(命令:export ALT_DROPS_DIR=/tmp/jdkBuild/openjdk/drop)
    ④再次执行make编译命令

    8)make 编译提示 g++: Command not found
    clipboard
    原因:g++没有安装或没有更新
    解决方式:安装或更新g++(命令:yum -y update gcc 或 yum -y install gcc+ gcc-c++)

    9)make 编译提示 symbol JVM_SetNativeThreadName, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
    clipboard
    原因:不明
    解决方式:换成jdk6来编译openjdk7,修改为jdk6后,需同时修改环境变量,如下:
    export ALT_BOOTDIR=/usr/java/jdk1.6.0_45
    export ALT_JDK_IMPORT_PATH=/usr/java/jdk1.6.0_45

    10)make 编译提示 time is more than 10 years from present
    clipboard
    原因:时间不对
    解决方式:修改 openjdk 源码目录下 CurrencyData.properties 文件内的时间
    文件路径:openjdk/jdk/src/share/classes/java/util/CurrencyData.properties,时间修改为10年以内即可(我不确定是哪个时间的影响,那就都修改吧),修改位置如下:
    clipboard
    clipboard
    clipboard
    clipboard
    clipboard

    11)make 编译提示 /usr/bin/ld: cannot find -lX11
    clipboard
    原因:缺少 X11 相关的包
    解决方式:安装libX11(命令:yum install *X11*)

    12)make 编译提示 error: X11/Intrinsic.h: No such file or directory
    clipboard
    原因:缺少 Xt-devel 的包
    解决方式:安装 Xt-devel(命令:yum install libXt-devel)

    13)make 编译提示 error: X11/extensions/shape.h: No such file or directory
    clipboard
    原因:缺少 libXtst 的包
    解决方式:安装 libXtst(命令:yum install libXtst-devel)

    14)make 编译提示 error: X11/extensions/Xrender.h: No such file or directory
    clipboard
    原因:缺少 Xrender-devel 的包
    解决方式:安装 Xrender-devel(命令:yum install libXrender-devel)

    四、脚本汇总

    初始化配置脚本:initBuild(命令:source initBuild)

    export LANG=C
    export ALT_BOOTDIR=/usr/java/jdk1.6.0_45
    export ALT_JDK_IMPORT_PATH=/usr/java/jdk1.6.0_45
    export ANT_HOME=/opt/apache-ant-1.8.3
    export ALLOW_DOWNLOADS=true
    export HOTSPOT_BUILD_JOBS=4
    export ALT_PARALLEL_COMPILE_JOBS=4
    export SKIP_COMPARE_IMAGES=true
    export USE_PRECOMPILED_HEADER=true
    export BUILD_LANGTOOLS=true
    export BUILD_HOTSPOT=true
    export BUILD_JDK=true
    BUILD_DEPLOY=false
    BUILD_INSTALL=false
    export ALT_OUTPUTDIR=/tmp/jdkBuild/build
    export ALT_DROPS_DIR=/tmp/jdkBuild/openjdk/drop
    unset JAVA_HOME
    unset CLASSPATH

    初始化安装脚本:initInstall.sh(命令:./initInstall.sh)

    yum install cups-devel.x86_64
    yum install freetype.x86_64 freetype-devel.x86_64
    yum install alsa*
    yum -y install gcc+ gcc-c++
    yum install *X11*
    yum install libXt-devel
    yum install libXtst-devel
    yum install libXrender-devel

    五、参考资料

    源码官网下载链接:

    https://blog.csdn.net/chenyyhh92/article/details/78298510

    编译JDK问题参考:

    http://chenjingbo.iteye.com/blog/1117021

    https://blog.csdn.net/pangencheng/article/details/80072880

    https://blog.csdn.net/my_computer/article/details/37879469

    http://blog.51cto.com/13266852/1962186

  • 相关阅读:
    2019牛客暑期多校训练营(第二场)
    2019牛客暑期多校训练营(第一场)
    JOISC2014 挂饰("01"背包)
    UPC 2019年第二阶段我要变强个人训练赛第十六场
    UPC个人训练赛第十五场(AtCoder Grand Contest 031)
    Wannafly挑战赛15 C“出队”(约瑟夫环类问题)
    UVA 133“The Dole Queue”(循环报数处理技巧)
    洛谷P1169 [ZJOI2007]棋盘制作 悬线法 动态规划
    洛谷P1273 有线电视网 树上分组背包DP
    CF1097D Makoto and a Blackboard 质因数分解 DP
  • 原文地址:https://www.cnblogs.com/alfredinchange/p/9737659.html
Copyright © 2011-2022 走看看