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=
# 告诉编译平台是64位,不然会按32位来编译
export ARCH_DATA_MODEL=
# 允许自动下载依赖
export ALLOW_DOWNLOADS=true
# 并行编译的线程数,编译时间长,为了不影响其他工作,我选择为2
export HOTSPOT_BUILD_JOBS=
# 是否跳过与先前版本的比较
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, slowdebug, slowdebug 含有最丰富的调试信息,没有这些信息,很多执行可能被优化掉,我们单步执行时,可能看不到一些变量的值。所以最好指定slowdebug 为编译级别):
bash ./configure --with-debug-level=slowdebug--with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1..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
mac下编译openjdk8?so easy!的更多相关文章
- MAC 下编译 ANDROID P 源码 提示 internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12" "10.13"]
MAC 下编译 ANDROID P 源码出现下面的问题: ninja: no work to do. [21/21] out/soong/.bootstrap/bin/soong_build out/ ...
- Centos7 下编译 Openjdk8
本文主要介绍如何在 Centos7 下编译 Openjdk8 源码,<深入理解java虚拟机>第二版网上好多 openjdk7 的帖子,编译 jdk8 和 7 还是有些差别的,比如大家经常 ...
- mac下编译FFmpeg-Android
参考: [史上最傻瓜的]mac下编译FFmpeg-Android http://blog.csdn.net/ashqal/article/details/9381037
- Mac 下编译 Hadoop
Mac 下编译 Hadoop-2.9.2 系统环境 系统: Mac OS_10.14.4 maven: Apache Maven 3.6.0 jdk: jdk_1.8.0_201 ProtocolBu ...
- Win10下编译OpenJDK8
导航目录 Win10下编译OpenJDK8 相关参考文章 编译环境 编译前准备 1.安装 Visual Studio 2010 Professional 2. 准备OpenJDK8 3. 编译JDK环 ...
- JAVA虚拟机学习笔记(一)Windows10下编译OpenJDK8
转载请注明源地址:http://www.cnblogs.com/lighten/p/5906359.html 1. 编译环境的准备 1.1 JDK源码下载 OpenJDK是JAVA发展史中的一个开源项 ...
- JVM-Ubuntu18.04.1下编译OpenJDK8
近期开始学习JVM,看的是周老师的<深入理解Java虚拟机>,打算先自己编译个JDK来提升对JVM的兴趣.本文分三部分来描述编译OpenJDK的过程,分别是编译前准备工作.构建编译环境.进 ...
- mac下编译安装grafana 4.2.0
go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...
- Mac下编译libpomelo静态库,并在cocos2dx项目中引用
最近在学习cocos2dx的过程中需要和服务器进行交互,所以这几天在学习libpomelo静态库的编译和使用.之前在windows系统下编译libpomelo,并在VS中引入比较顺利:但是,目前对Ma ...
随机推荐
- 一文看懂java的IO流
废话不多说,直接上代码 import com.fasterxml.jackson.databind.ObjectMapper; import java.io.*; import java.nio.ch ...
- 关于jstl和web.xml之间的版本问题
jstl的版本1.2对应web.xml3.1版本 jstl的版本1.1对应web.xml2.3版本 (IDEA中默认创建的是2.3的web.xml,最好换成3.1版本的) web.xml模板: < ...
- springcloud超简单的入门2--Eureka服务治理
Eureka服务治理 下面请听第一个话题,母...咳咳,拿错书了. Eureka简介 eureka是什么呢? 简单来说呢,当我的微服务应用多了起来,一个一个写死再程序里是件很不优雅的事情,而且同一服务 ...
- .NET Core 3.0 Preview 9 发布
翻译自官方博客 今天,我们宣布推出.NET Core 3.0 Preview 9.就像预览版8一样,我们专注打磨最终版本的.NET Core 3.0,而不是添加新功能.如果这些最终版本看起来不像早期预 ...
- SQL查询出距当前时间最近的一条或多条记录。
select * from bas_dredge,(SELECT C_ENTERPRISEID,MAX(D_UTIME) D_LTIME FROM BAS_DREDGE GROUP BY C_ENTE ...
- java 手机号码+邮箱的验证
import java.util.regex.Pattern; //导入的包 1:String REGEX_MOBILE = "^((17[0-9])|(14[0-9])|(13[0-9]) ...
- linux 假死分析
所谓假死,就是能ping通,但是ssh不上去:任何其他操作也都没反应,包括上面部署的apache也打不开页面. 作为一个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的.尤其是现在 ...
- js vue 页面添加水印
vue 微信页面添加水印 this.$nextTick(function() { watermark({ watermark_txt ...
- 【Java基础】关于枚举类你可能不知道的事
目录 谈谈枚举 1. 枚举类的定义 2. 枚举类的底层实现 3. 枚举类的序列化实现 4. 用枚举实现单列 5. 枚举实例的创建过程是线程安全的 谈谈枚举 如果一个类的对象个数是有限的而且是不变的,我 ...
- 【带着canvas去流浪(14)】Three.js中凹浮雕模型的生成方式
目录 一. 方案1:ThreeBSP.js或ThreeCSG.js扩展库 二. 方案2:平面镂空模型拉伸 三. 方案3:Cinema 4D建模后输出模型文件 示例代码托管在:http://www.gi ...