mac下编译JDK12
我的macOS版本是10.15.x,Xcode版本是12.2(看到别人说高版本有bug,实测可行)。
编译主要有三个步骤:
- 准备好一份编译好JDK 11和一份未编译JDK 12的源码。
- 构建编译环境
- 编译
1. 准备好一份编译好JDK 11和一份未编译JDK 12的源码
JDK 11:添加链接描述
OpenJDK由多个部分(HotSpot、JDK类库、JAXWS、JAXP······)构成,其中一部分(HotSpot)代码使用C、C++编写,而更多的代码则是使用Java语言来实现,因此编译这些Java代码就需要用到另一个编译期可用的JDK,官方称这个JDK为“BootStrap JDK”。编译OpenJDK 12时,Bootstrap JDK必须使用JDK 11及之后的版本。
JDK 12源码:添加链接描述
这个我下载的很慢,也可以去github上下载:添加链接描述
完成后解压,我电脑上有一个JDK 8,为了之后编译方便就把JAVA_HOME改成JDK 11的地址了。之后可以都改回去。
vi ~/.bash_profile
这里需要特别注意一个地方,JDK 9.0.4引入模块,CLASSPATH变量不再需要了,如果没有把这行注释的话,就会报找不到tools.jar,dt.jar的错误。
2. 构建编译环境
首先通过brew命令安装编译时需要的依赖
brew install autoconf #生成shell脚本的工具
brew install freetype #字体引擎
brew install ccache #编译加速
配合Xcode的Command Line Tools也是要的:
xcode-select --install
然后进入到JDK 12源码的解压目录,执行
bash configure --enable-debug --with-jvm-variants=server
就可以成功配置FastDebug版、仅含Server模式的HostSpot虚拟机。执行过程中如果检查到缺少依赖,使用brew命令下载依赖即可。
3. 编译
本来在当前目录下再执行
make images
就可以了,但是巨坑的是JDK 12的源码里有bug,会导致编译失败,这里列举我遇到的bug。(假设JDK 12源码解压文件夹名字是jdk12)
- …/src/hotspot/share/runtime/arguments.cpp:1452:35: error: result of comparison against a string literal is unspecified (use an explicit string comparison function instead) [-Werror,-Wstring-compare].
解决方法是找到…/jdk12/src/hotspot/share/runtime/arguments.cpp的1452行,将
if (old_java_vendor_url_bug != DEFAULT_VENDOR_URL_BUG) {// 替换为
if (strcmp(old_java_vendor_url_bug, DEFAULT_VENDOR_URL_BUG) != 0) {
- …/test/hotspot/gtest/classfile/test_symbolTable.cpp:62:6: error: explicitly assigning value of variable of type ‘TempNewSymbol’ to itself [-Werror,-Wself-assign-overloaded].
解决方法是找到…/jdk12/test/hotspot/gtest/classfile/test_symbolTable.cpp的62行,将
s1 = s1; // self assignment
// 注释掉
// s1 = s1; // self assignment
- /src/hotspot/share/runtime/sharedRuntime.cpp:2873:85: error: expression does not compute the number of elements in this array; element type is ‘double’, not ‘relocInfo’ [-Werror,-Wsizeof-array-div].
解决方法是找到…/jdk12/src/hotspot/share/runtime/sharedRuntime.cpp的2873行,将
buffer.insts()->initialize_shared_locs((relocInfo*)locs_buf, sizeof(locs_buf) / sizeof(relocInfo));
// 替换为
buffer.insts()->initialize_shared_locs((relocInfo*)locs_buf, (sizeof(locs_buf)) / sizeof((relocInfo)));
- /src/java.desktop/macosx/native/libawt_lwawt/awt/CSystemColors.m:134:9: error: converting the result of ‘?:’ with integer constants to a boolean always evaluates to ‘true’ [-Werror,-Wtautological-constant-compare].
解决方法是找到…/jdk12/src/java.desktop/macosx/native/libawt_lwawt/awt/CSystemColors.m的134行,将
if (colorIndex < (useAppleColor) ? sun_lwawt_macosx_LWCToolkit_NUM_APPLE_COLORS : java_awt_SystemColor_NUM_COLORS) {// 替换为
if (colorIndex < ((useAppleColor) ? sun_lwawt_macosx_LWCToolkit_NUM_APPLE_COLORS : java_awt_SystemColor_NUM_COLORS)) {
看到还有人说/jdk12/src/jdk.base/share/native/libfdlibm/e_asin.c的106行也有错误,将eles缺少的花括号补上就可以了。
bug修复完后再执行 make images 命令,等一段时间就可以了(期间电脑很烫
mac下编译JDK12相关推荐
- iOS架构-C/C++lame库在Mac下编译通用静态库.a库(13)
C/C++ 有很多成熟的库,还有很多特殊功能的库,有时候iOS 平台开发一些比较前沿或者冷门的功能时,iOS并没有提供解决方案,这时候就可以研究C/C++的一些库,为我们使用.但是在Xcode编译C/ ...
- mac下编译hadoop-3.0.3
文章目录 1.编译前准备 2. 源码目录下执行 3.编译 5.错误集锦 5.1 Apache Hadoop Pipes编译失败 5.1.2 解决: 5.2 hadoop-client-check-te ...
- mac下编译安卓源码
资源 Mac OS10.12 编译Android源码8.1 aosp编译-需翻墙 Mac下编译安卓源码 手把手教你在Mac OS下载.编译及导入Android源码 步骤 准备 磁盘空间大于180G 安 ...
- 在Mac下编译ijkplayer os文件
在Mac下编译ijkplayer os文件 第一步: 1.安装homebrew ruby -e "$(curl -fsSL https://raw.githubusercontent.com ...
- Mac下编译ffmpeg出现“ERROR: x265 not found using pkg-config”
x265已经编译成功,但是ffmpeg/configure出现错误 ERROR: x265 not found using pkg-config 看了一下config.log,出了一坨"Un ...
- mac下编译安装grafana 4.2.0
go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...
- Mac 下编译 libmono.so 和 DLL 加密详解
Unity 打出的安卓包为了防止反编译,需要对 Assembly-CSharp.dll 加密处理.Assembly-CSharp.dll 是由 libmono.so 运行时读取然后在 mono 虚拟机 ...
- Mac下编译太阳神三国杀源码
Mac系统版本是10.13.2,Qt版本是5.11,参考官方博文:太阳神三国杀 Mac 版构建指南 安装Qt5 下载最新的Qt5安装包qt-opensource-mac-x64-5.11.0.dmg, ...
- mac下编译android源码避坑指南(新)
截至目前mac环境下android源码编译最新避坑指南 避坑方法 配置(不说配置的都是耍流氓) 下载 编译 烧录 注意事项 避坑方法 源码.SDK.机型版本一定要清楚,有些特殊的版本需要特殊的方法,官 ...
最新文章
- .统计日志中攻击的IP次数然后加IP屏蔽
- Windows 8最值得期待的8大特性
- Net性能分析与调试培训资料
- 公式 有效值_纯电阻电路电功率公式
- MFC+GDI+绘制出雷达余晖效果
- 18 4Sum(寻找四个数之和为指定数的集合Medium)
- esd防护_电路级ESD防护方法
- Linux学习之C语言的进程与线程编程
- 我的Python成长之路---第六天---Python基础(20)---2016年2月20日(晴)
- 充满艺术范儿!艺术感在线的界面欣赏
- oracle sql如何剔除周末,Oracle 跳过周末的sql
- python软件下载3版本-【python3下载】python3下载安装 中文版-七喜软件园
- vivado中FIFO IP核的Standard FIFO和First-word-Fall-Through模式的仿真比较
- 万能地图下载器X3版本终止升级维护
- How to Create Your Own HDR Environment Maps
- 微信小程序周记(第一周 7.19-7.25)
- 为什么要制定项目计划?
- 推荐几款极简的手机浏览器
- 浏览器中显示PPT的展示效果
- i1U机架服务器做系统,微星MS-9211 1U 机架式服务器准系统