zoukankan      html  css  js  c++  java
  • mac下编译openjdk8?so easy!

    写在最前面的话:建议第一次编译jdk的朋友,查阅任何博客都不如认真读一遍源码中的README-builds.html

    环境:macOS High Sierra(10.13.5)

    编译jdk:openjdk8

    操作流程就不多写了,README-builds.html写的很清晰,当然,即使跟着README-builds.html操作不代表就不会遇到任何问题,但网上很多教程(mac环境的)都偏过时,并且在解决问题上本人有不同的想法,因此本文只针对编译过程中遇到的问题以及解决问题的思考总结;

    在开始之前先进行环境变量配置:

    vi ~/.bash_profile

    在.bash_profile文件底部插入:

    # 设定语言选项,必须设置
    export LANG=C
    # Mac平台,C编译器不再是GCC,是clang
    export CC=gcc   #如果想使用clang,这里把gcc换成clang即可
    export CXX=g++ 
    # 跳过clang的一些严格的语法检查,不然会将N多的警告作为Error
    export COMPILER_WARNINGS_FATAL=false
    # 链接时使用的参数
    export LFLAGS='-Xlinker -lstdc++'
    # 是否使用clang
    export USE_CLANG=false
    # 使用64位数据模型
    export LP64=1
    # 告诉编译平台是64位,不然会按32位来编译
    export ARCH_DATA_MODEL=64
    # 允许自动下载依赖
    export ALLOW_DOWNLOADS=true
    # 并行编译的线程数,编译时间长,为了不影响其他工作,我选择为2
    export HOTSPOT_BUILD_JOBS=2
    # 是否跳过与先前版本的比较
    export SKIP_COMPARE_IMAGES=true
    # 是否使用预编译头文件,加快编译速度
    export USE_PRECOMPILED_HEADER=true
    # 是否使用增量编译
    export INCREMENTAL_BUILD=true
    # 编译内容
    export BUILD_LANGTOOLS=true
    export BUILD_JAXP=true
    export BUILD_JAXWS=true
    export BUILD_CORBA=true
    export BUILD_HOTSPOT=true
    export BUILD_JDK=true
    # 编译版本
    export SKIP_DEBUG_BUILD=true
    export SKIP_FASTDEBUG_BUILD=false
    export DEBUG_NAME=debug
    # 避开javaws和浏览器Java插件之类的部分的build
    export BUILD_DEPLOY=false
    export BUILD_INSTALL=false
    unset JAVA_HOME

    输入完记得执行以下命令让刚刚的修改生效:

    source ~/.bash_profile

    遇到的问题:

    一、在执行(在configure时,一共可以指定三种级别: release, fastdebug, slowdebugslowdebug 含有最丰富的调试信息,没有这些信息,很多执行可能被优化掉,我们单步执行时,可能看不到一些变量的值。所以最好指定slowdebug 为编译级别):

    bash ./configure --with-debug-level=slowdebug--with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

    的时候报:configure: error: GCC compiler is required

    遇到的第一个报错:

    原因:从XCode 4.2开始,Clang已经取代GCC成为macOS的默认的编译器:http://clang.llvm.org/get_started.html

    解决过程(不想换jdk9或者装旧版XCode ):

    没有GCC,那就安装一个呗(可以选择注释掉GCC compiler 报错的代码,这样就可以不必安装gcc,并用clang编译),不要安装编译器版本高于5的,因为默认启用c++14 导致编译中断,我选择安装的是gcc4.9:

    brew install gcc@4.9

    安装完需要把安装的gcc4.9指向系统默认调的gcc:

    sudo ln -s /usr/local/Cellar/gcc@4.9/4.9.4_1/bin/gcc-4.9 /usr/bin/gcc
    sudo ln -s /usr/local/Cellar/gcc@4.9/4.9.4_1/bin/g++-4.9 /usr/bin/g++

    这时遇到一个问题:ln: /usr/bin/gcc: Operation not permitted,搜了一下,原来mac从El Capitan开始启用了SIP,目的是提高系统安全性,避免第三方软件对系统级别目录进行修改。针对以下目录即使root用户也有权限限制:

    根据官网的提示,推荐用户使用以下路径代替:

    网上普遍的做法是无脑粗暴的关闭SIP,不给用/usr/bin 可以用/usr/local/bin 的嘛,变通一下不就可以跳过这个报错了:

    sudo ln -s /usr/local/Cellar/gcc@4.9/4.9.4_1/bin/gcc-4.9 /usr/local/bin/gcc
    sudo ln -s /usr/local/Cellar/gcc@4.9/4.9.4_1/bin/g++-4.9 /usr/local/bin/g++
    alias gcc='/usr/local/bin/gcc'
    alias g++='/usr/local/bin/g++'

    配置完再运行configure,这次没报GCC的问题了,但报了:configure: error: Could not find freetype!,缺少字体库就装个字体库: 

    brew install freetype

    安装完再运行configure,这次返回:

    表示配置没问题了,但最好装个ccache提速,fine,再装个ccache:

    brew install ccache

    二、配置没问题后,开始执行make all,报下面这个错误:

    报错:error: ordered comparison between pointer and zero ('char *' and 'int')

    这个报错是因为编译器环境不同导致,XCode的编译器是LLVM,而openjdk8默认使用的是GCC。因此只要把报这个错的代码从pointer>0改成pointer!=NULL 即可,例如:

    只要把 base()>0 改成 base!=NULL 即可

    三、报错:'X11/Xlib.h' file not found

    查了一下,需要安装XQuartz。见:https://support.apple.com/zh-cn/HT201341

    安装完需要配置:

     ln -s /opt/X11/include/X11 /usr/local/include/X11

    接着就编译完成了:

    最后验证一波编译出来的jdk:

    build/macosx-x86_64-normal-server-fastdebug/jdk/bin/java -version

    输出以下内容表示编译成功:

    参考:

    https://www.ibm.com/developerworks/cn/opensource/os-cn-clang/

    https://gvsmirnov.ru/blog/tech/2014/02/07/building-openjdk-8-on-osx-maverick.html

    https://www.jianshu.com/p/d9a1e1072f37

  • 相关阅读:
    Educational Codeforces Round 20 A. Maximal Binary Matrix(模拟)
    SCU 4440 Rectangle (思维+暴力)
    poj 2799 IP Networks (模拟/水题)
    Uva 10629 Huge Mods (指数循环节)
    FUZ 1759 Super A^B mod C (指数循环节/模板)
    Uva 11149 Power of Matrix (倍增法/模板)
    poj 3863&&Gym
    Codeforces 392C Yet Another Number Sequence (矩阵快速幂+二项式展开)
    Uva 11029 Leading and Trailing (求n^k前3位和后3位)
    Uva 10006 Carmichael Numbers (快速幂)
  • 原文地址:https://www.cnblogs.com/JunFengChan/p/9266033.html
Copyright © 2011-2022 走看看