《深入理解Java虚拟机》第一章 OpenJDK12环境搭建-MacOS26版
《深入理解 Java 虚拟机》第一章 OpenJDK 12 环境搭建 - MacOS 26 版一、环境准备OpenJDK 12 源码下载安装 JDK 11编译时作为 Boot JDK安装 Xcode 和 Command Line Tools安装 Homebrew安装依赖库二、开始编译 JDK三、逐项修复问题 1SDK does not contain libarclite at the path问题 2redeclaration of C built-in type bool问题 3too many arguments to function call,问题 4too many arguments to function call问题 5gif_lib.h - redeclaration of C built-in type bool问题 6fp.h file not found一、环境准备编译环境JDK 12 源码 macOS 26Darwin 26.5.2 新版 Xcode 26.4/clangOpenJDK 12 源码下载浏览器打开地址https://hg.openjdk.org/jdk/jdk12/ macOS 下载 gz 格式安装 JDK 11编译时作为 Boot JDK官网地址https://www.oracle.com/java/technologies/downloads/#java11安装 Xcode 和 Command Line ToolsmacOS 26 无法安装低版本 Xcode。官网地址https://developer.apple.com/download/all/?qxcode安装验证192 JDK12% xcode-select--installxcode-select: note: Command line tools are already installed. UseSoftware UpdateinSystem Settings or the softwareupdatecommandline interface toinstallupdates提示已安装证明安装成功。在终端中执行gcc -v命令查看是否安装成功192 JDK12% gcc-vApple clang version21.0.0(clang-2100.0.123.102)Target: x86_64-apple-darwin25.5.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin安装 Homebrew官网https://brew.sh//bin/bash-c$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)终端运行如下命令可查看安装的版本信息~192 JDK12% brew-vHomebrew6.0.13安装依赖库打开终端执行如下命令brewinstallccache brewinstallfreetype brewinstallautoconf至此编译环境就准备好了。二、开始编译 JDK首先终端先切到下载的 JDK 目录中下面的命令可以查看编译参数bashconfigure--help好了开始编译编译命令注意 JDK 要换成自己的地址bashconfigure\--enable-debug\--with-jvm-variantsserver\--with-sysroot/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk\--with-boot-jdk/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home\--disable-warnings-as-errors\--with-extra-cflags-Wno-incompatible-function-pointer-types -Wno-cast-function-type-mismatch -F/Library/Frameworks\--with-extra-cxxflags-stdgnu11 -F/Library/Frameworks输出下面的内容证明这一步没问题。电脑配置显示的不完全一样Tools summary: * Boot JDK:javaversion11.0.322026-07-21 LTS Java(TM)SE Runtime Environment18.9(build11.0.327-LTS-196)Java HotSpot(TM)64-Bit Server VM18.9(build11.0.327-LTS-196, mixed mode)(at /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home)* Toolchain: clang(clang/LLVM from Xcode26.4)* C Compiler: Version21.0.0(at /usr/bin/clang-stdgnu23)* C Compiler: Version21.0.0(at /usr/bin/clang)Build performance summary: * Cores to use:16* Memory limit:65536MB然后执行编译命令makeimages编译报错可以参考一下第三章。编译遇到问题排查思路根据提示看构建目录底下的报错去修复问题。build/macosx-x86_64-server-fastdebug/make-support/failure-logs然后每次重新编译要注意清理上一次编译的脏数据依次执行makeclean然后执行makedist-clean看到下面的命令就证明编译成功了Finished building targetimagesinconfigurationmacosx-x86_64-server-fastdebug三、逐项修复核心矛盾JDK 12 代码基于 C99 时代写法新版 clang 默认启用 C23 标准bool 变为内置关键字、() 无原型声明被移除导致一系列编译错误。问题 1SDK does not contain ‘libarclite’ at the pathGitHub 上下载对应的依赖https://github.com/chenZai90/ios-Rescorce 把 arc 文件放到你提示的目录底下即可问题 2redeclaration of C built-in type ‘bool’Infileincluded from.../src/jdk.hotspot.agent/macosx/native/libsaproc/MacosxDebuggerLocal.m:45: Infileincluded from.../src/jdk.hotspot.agent/macosx/native/libsaproc/libproc_impl.h:30:.../src/jdk.hotspot.agent/macosx/native/libsaproc/libproc.h:47:13: error: redeclaration of C built-intypebool47|typedef int bool;|^1error generated.文件src/jdk.hotspot.agent/macosx/native/libsaproc/libproc.h原因C23 下 bool 是内置类型非宏#ifndef bool/#ifdef bool均无法拦截Objective-C 模式下 bool 同样是内置关键字。修复删除 macOS 分支的 bool 定义添加stdbool.h当前文件最终状态#ifdef__APPLE__#includestdbool.htypedefenumps_err_e{PS_OK,PS_ERR,PS_BADPID,PS_BADLID,PS_BADADDR,PS_NOSYM,PS_NOFREGS}ps_err_e;#ifndefpsaddr_t#definepsaddr_tuintptr_t#endif/* 删除以下整个块 #ifndef __cplusplus #ifndef bool typedef int bool; #define true 1 #define false 0 #endif // bool #endif // __cplusplus */#ifndeflwpid_t#definelwpid_tuintptr_t#endif#includemach/thread_status.h问题 3too many arguments to function call,.../awt_ImagingLib.c:430:44: error: too many arguments tofunctioncall, expected0, have6430|if((*sMlibFns[MLIB_CONVKERNCVT].fptr)(kdata,scale,dkern,w,h,|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~431|mlib_ImageGetType(src))!MLIB_SUCCESS){|~~~~~~~~~~~~~~~~~~~~~~.../awt_ImagingLib.c:458:45: error: too many arguments tofunctioncall, expected0, have10458|status(*sMlibFns[MLIB_CONVMxN].fptr)(dst, src, kdata, w, h,|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~...8errors generated.原因mlibFnS_t.fptr 声明为旧式 mlib_status (*fptr)()C23 将其视为严格零参数原型 (void)。修复改为变参函数指针 (…)C17/C23/C 均合法共 3 个文件① src/java.desktop/share/native/libawt/awt/medialib/awt_ImagingLib.h 第 35 行// 修改前mlib_status(*fptr)();// 修改后mlib_status(*fptr)(...);② src/java.desktop/unix/native/libawt/awt/awt_Mlib.c// 第 53 行// 修改前mlib_status(*fPtr)();// 修改后mlib_status(*fPtr)(...);// 第 126 行// 修改前fPtr(mlib_status(*)())dlsym(handle,mptr[i].fname);// 修改后fPtr(mlib_status(*)(...))dlsym(handle,mptr[i].fname);③ src/java.desktop/windows/native/libawt/windows/awt_Mlib.cpp// 第 84 行// 修改前mlib_status(*fPtr)();// 修改后mlib_status(*fPtr)(...);// 第 88-89 行// 修改前fPtr(mlib_status(*)())::GetProcAddress(hDLL,pMlibFns[i].fname);// 修改后fPtr(mlib_status(*)(...))::GetProcAddress(hDLL,pMlibFns[i].fname);原则类型声明 / 强转中的 () → (…)调用处如 (*sMlibFns[…].fptr)(参数)不用动。问题 4too many arguments to function call.../CPrinterJob.m:69:21: error: conflicting typesforcreateDefaultNSPrintInfo69|static NSPrintInfo* createDefaultNSPrintInfo(JNIEnv* env, jstring printer)|^.../CPrinterJob.m:47:21: note: previous declaration is here47|static NSPrintInfo* createDefaultNSPrintInfo();|^.../CPrinterJob.m:453:55: error: too many arguments tofunctioncall, expected0, have2453|NSPrintInfo* printInfocreateDefaultNSPrintInfo(env, NULL);|~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~.../CPrinterJob.m:47:21: note:createDefaultNSPrintInfodeclared here47|static NSPrintInfo* createDefaultNSPrintInfo();|^...(rest of output omitted)文件src/java.desktop/macosx/native/libawt_lwawt/awt/CPrinterJob.m原因第 47 行前向声明 static NSPrintInfo* createDefaultNSPrintInfo(); 与第 69 行带参定义冲突C23 下 () (void)。修复第 47 行补全参数与定义一致// 修改前staticNSPrintInfo*createDefaultNSPrintInfo();// 修改后staticNSPrintInfo*createDefaultNSPrintInfo(JNIEnv*env,jstring printer);问题 5gif_lib.h - redeclaration of C built-in type ‘bool’* For target support_native_java.desktop_libsplashscreen_dgif_lib.o: Infileincluded from.../giflib/dgif_lib.c:48:.../giflib/gif_lib.h:50:13: error: redeclaration of C built-intypebool50|typedef int bool;|^1error generated. * For target support_native_java.desktop_libsplashscreen_gif_err.o: Infileincluded from.../giflib/gif_err.c:33:.../giflib/gif_lib.h:50:13: error: redeclaration of C built-intypebool文件src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h原因giflib 主动 #undef bool 后 typedef int bool;C23 下 bool 是内置关键字。修复加条件保护——仅非 C 且 C 标准低于 C23 时定义保留旧环境行为#includestddef.h#if!defined(__cplusplus)(!defined(__STDC_VERSION__)||__STDC_VERSION__202311L)#ifdefbool#undefbool#endiftypedefintbool;#definefalse0#definetrue1#endif问题 6fp.h’ file not found* For target support_native_java.desktop_libsplashscreen_pngerror.o: Infileincluded from.../libpng/pngerror.c:47:.../libpng/pngpriv.h:551:16: fatal error:fp.hfilenot found551|# include fp.h|^~~~~~1error generated. * For target support_native_java.desktop_libsplashscreen_pngget.o: Infileincluded from.../libpng/pngget.c:43:.../libpng/pngpriv.h:551:16: fatal error:fp.hfilenot found551|# include fp.h|^~~~~~1error generated. * For target support_native_java.desktop_libsplashscreen_pngmem.o: Infileincluded from.../libpng/pngmem.c:48:.../libpng/pngpriv.h:551:16: fatal error:fp.hfilenot found551|# include fp.h文件src/java.desktop/share/native/libsplashscreen/libpng/pngpriv.h第 544-555 行原因libpng 用 defined(TARGET_OS_MAC) 判断老式 Mac 环境但该宏在现代 macOS SDK 中恒为 1误入包含 Solaris/老 Mac 专属 fp.h 的分支。修复加APPLE分流现代苹果系统直接走 math.h#ifdefined(__APPLE__)#includemath.h#elif(defined(__MWERKS__)defined(macintosh))||defined(applec)||\defined(THINK_C)||defined(__SC__)||defined(TARGET_OS_MAC)/* We need to check that math.h hasnt already been included earlier * as it seems it doesnt agree with fp.h, yet we should really use * fp.h if possible. */#if!defined(__MATH_H__)!defined(__MATH_H)!defined(__cmath__)#includefp.h#endif#else#includemath.h#endif

相关新闻

逆向工程中编码与加密算法的识别、分析与实战应用

逆向工程中编码与加密算法的识别、分析与实战应用

1. 从“菜鸡”到入门:为什么逆向工程绕不开编码与加密 刚接触逆向工程的朋友,常常会卡在一个看似基础,实则至关重要的环节:面对程序里一堆“乱码”或者经过变换的数据,完全无从下手。你兴致勃勃地打开调试器&#xff0…

2026/8/2 12:25:14 阅读更多 →
PCB板材选型全解析:从FR-4到高频材料,工程师必备实战指南

PCB板材选型全解析:从FR-4到高频材料,工程师必备实战指南

1. 从一块“板子”说起:PCB板材为何是设计的基石当你拿到一块电路板,第一眼看到的可能是上面密密麻麻的线路和元器件。但支撑这一切、决定其性能上限和可靠性的,却是那块看似平平无奇的基板——PCB板材。我接触过太多项目,从消费电…

2026/8/2 12:24:13 阅读更多 →
如何彻底解决多语言字体显示问题:Noto字体完整使用指南

如何彻底解决多语言字体显示问题:Noto字体完整使用指南

如何彻底解决多语言字体显示问题:Noto字体完整使用指南 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 您是否曾在网页或应用中看到一堆小方块代替了文字?这就是令…

2026/8/2 12:24:13 阅读更多 →

最新新闻

图论进阶:从邻接矩阵到图空间与托兰定理的数学全景

图论进阶:从邻接矩阵到图空间与托兰定理的数学全景

1. 项目概述:从邻接矩阵到图空间的数学图景搞图论研究或者做复杂网络分析的朋友,对邻接矩阵肯定不陌生。我们通常用它来存一张图,然后进行各种遍历和计算。但如果你觉得邻接矩阵的作用就止步于此,那可能就错过了图论中最精妙也最有…

2026/8/2 13:25:41 阅读更多 →
基于XIAO ESP32-C5的Zigbee开发快速入门与实战指南

基于XIAO ESP32-C5的Zigbee开发快速入门与实战指南

1. 项目概述与核心价值最近在捣鼓智能家居的本地化方案,Zigbee协议因为其低功耗、自组网和强抗干扰能力,成了我的首选。市面上的Zigbee模组不少,但要么开发门槛高,要么功能单一。直到我上手了Seeed Studio的XIAO ESP32-C5&#xf…

2026/8/2 13:25:41 阅读更多 →
5分钟掌握res-downloader:轻松下载全网视频资源的神器

5分钟掌握res-downloader:轻松下载全网视频资源的神器

5分钟掌握res-downloader:轻松下载全网视频资源的神器 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 还在为无法…

2026/8/2 13:25:41 阅读更多 →
6种字重免费开源中文字体:PingFangSC苹果平方字体完整解决方案

6种字重免费开源中文字体:PingFangSC苹果平方字体完整解决方案

6种字重免费开源中文字体:PingFangSC苹果平方字体完整解决方案 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在数字界面设计中,…

2026/8/2 13:25:40 阅读更多 →
树莓派RS232扩展板硬件解析与工业通信实战指南

树莓派RS232扩展板硬件解析与工业通信实战指南

1. 项目缘起:为什么树莓派还需要一块RS232板?如果你玩过树莓派,肯定对它的GPIO排针不陌生,上面集成了UART、I2C、SPI等丰富的接口。但当你兴冲冲地想用它连接一台老旧的工业PLC、一台串口打印机,或者调试一个古老的嵌入…

2026/8/2 13:25:40 阅读更多 →
数组从入门到精通:内存布局、核心操作与动态数组实战

数组从入门到精通:内存布局、核心操作与动态数组实战

1. 从“闯关”到“精通”:为什么数组实验值得你投入时间 最近在技术社区和在线学习平台上,看到不少朋友在讨论“头歌”这类在线实验平台的数组闯关题目。从热搜词里也能感受到大家的热情和困惑:从基础的“C语言数组和指针”、“数组常用方法”…

2026/8/2 13:24:40 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →