美文网首页
osx环境编译jdk8

osx环境编译jdk8

作者: allanYan | 来源:发表于2017-07-12 10:03 被阅读0次

    由于公司最近的项目都统一使用Jdk8,因此打算在自己的机器上搭建open jdk的调试环境;

    jdk8的编译方式发生了比较大的变化,不再依赖ant,而是采用configure&make的方式;

    下面是具体的编译步骤:

    1. 安装mercurial(openjdk源码由hg管理),我选择的是3.8.2版本:
       sudo brew install mercurial
    
    1. 下载源码:
    hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-source
    cd java-source
    chmod +x get_source.sh
    ./get_source.sh
    

    jdk源码下载中,发现网络极其不稳定,我重试了很多次才将源码全部下载到本地;

    1. 安装依赖
    brew install freetype #2.6.3版本
    
    1. 编译前准备
      • 修改relocInfo.hpp的367行(hotspot/src/share/vm/code/relocInfo.hpp):
        修改前为:
    inline friend relocInfo prefix_relocInfo(int datalen=0);
    

    修改后 为:

    inline friend relocInfo prefix_relocInfo(int datalen);
    
    • 修改generated-configure.sh的20061和21640行(common/autoconf/generated-configure.sh),解决configure: error: GCC compiler is required 错误:
      修改前为:
    as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5
    

    修改后为:

    #as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5
    

    我本机的xcode为7.3.1,编译器为clang,版本为Apple LLVM version 7.3.0 (clang-703.0.31);而jdk编译默认需要gcc编译器,由于clang703已经支持大部分的gcc语法,因此此处我是直接注释掉编译器检查,当然也可以安装gcc编译器进行编译;
    注意:编译器的版本很重要,否则会报一大堆语法错误;如果采用gcc,要求>=3.81

    1. 编译
    ./configure  --with-debug-level=slowdebug  --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home --with-target-bits=64 --with-jvm-variants=server --with-jdk-variant=normal --with-milestone=internal  --with-num-cores=2 --with-jobs=4 CC=clang CXX=clang++
    make COMPILER_WARNINGS_FATAL=false LFLAGS='-Xlinker -lstdc++' CC=clang USE_CLANG=true LP64=1
    

    一般而言,编译jdk8要求boot-jdk的版本为jdk1.7,此处我设置的with-boot-jdk为jdk1.7.0.79;

    1. 编译完成之后,可以通gdb进行调试:
    export JAVA_ROOT_PATH=~/java-source/jdk8/build/macosx-x86_64-normal-server-slowdebug
    export ALT_JAVA_HOME=${JAVA_ROOT_PATH}/jdk 
    ${ALT_JAVA_HOME}/bin/javac -g Hello.java
    ${JAVA_ROOT_PATH}/hotspot/bsd_amd64_compiler2/debug/hotspot -gdb HelloWorld       
    

    备注:编译jdk8还依赖其他,比如cups, pulse, alsa等,都可以通过brew进行安装

    相关文章

      网友评论

          本文标题:osx环境编译jdk8

          本文链接:https://www.haomeiwen.com/subject/ahgvhxtx.html