• OpenJDK 编译-Linux环境


    说明:笔者是在Ubuntu 16.04虚拟机中编译 OpenJDK 8

    源码下载

    http://download.java.net/openjdk/jdk8/

    推荐直接下载openjdk-8-src-b132-03_mar_2014.zip

    环境准备:

    安装bootstrap JDK,笔者安装的jdk7

    在环境变量PATH中添加jdk的bin目录,不添加的话,在编译第一步时需要带参数

    解压后阅读README-builds.html,按照要求安装Linux环境需要的软件。不清楚要安装哪些,在编译第一步失败的时候会提示你安装。

    #如果之前有设置的话,这两个环境变量需要去掉,不然会出问题。
    
    unset JAVA_HOME
    
    unset CLASSPATH

    编译

    切换到解压后目录

    第一步:

    bash ./configure

    或者带jdk目录,path为bootstrap JDK的目录

    bash ./configure --with-boot-jdk=path

    第二步:

    make all

    *遇到的坑爹问题

    1,版本问题,recipe for target 'check_os_version' failed

     方案一:直接注释检查

    nano hotspot/make/linux/Makefile

     check_os_version: 
    
    #ifeq($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),) 
    
    #   $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1; 
    
    #endif 

     方案二:添加版本支持

    nano hotspot/make/linux/Makefile

    SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%

    2,make参数语法,添加'I'

    nano hotspot/make/linux/makefiles/adjust-mflags.sh
    # line 67. (新版本make语法有变动)
     s/ -([^        I][^    ]*)j/ -1 -j/

    3,undefine symbols错误

    提升一个模板函数定义至头文件,避免出现undefined symbols错误。

    # 将 hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp 中的template <class T> void write_ref_array_pre_work(T* dst, int count)方法,提升到对应的
    头文件g1SATBCardTableModRefBS.hpp中。
    # 模板函数定义需要出现在头文件中,以便编译器为其生成特化版本。若无此修改,运行编译后的java程序,将出现undefine symbols错误。
    

    编译成功标识

    验证

    1,the build result. This directory typically looks like:

    build/linux-x64-normal-server-release

    2,JDK输出目录:

    In particular, the build/*/images/j2sdk-image/bin directory should contain executables for the OpenJDK tools and utilities for that configuration.

     3,查看版本

    3.1直接在bin目录下运行  ./java -version

    3.2将编译好的JDK复制到适当目录,配置JAVA_HOME指向该目录,使环境变量生效后,执行java -version命令,就能看到带用户机器名的jdk版本。

    cp build/linux-x86_64-normal-server-release/images/j2sdk-image/ -r /usr/lib/jdk/openjdk8
    sunil@ubuntu:~/Downloads/openjdk$ java -version
    openjdk version "1.8.0-internal"
    OpenJDK Runtime Environment (build 1.8.0-internal-sunil_2016_11_21_18_06-b00)
    OpenJDK 64-Bit Server VM (build 25.0-b70, mixed mode)
    sunil@ubuntu:~/Downloads/openjdk$ 

    参考文档

    README

    深入理解Java虚拟机(第2版)

    https://blog.mlworks.cn/tech/compile-openjdk8-ubuntu-16.04.html

  • 相关阅读:
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    个人作业——软件工程实践总结&个人技术博客
    个人技术总结
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(1/2)
  • 原文地址:https://www.cnblogs.com/sunilsun/p/6078171.html
Copyright © 2020-2023  润新知