《深入理解Java虛擬機(jī)》第一章 OpenJDK12環(huán)境搭建-MacOS26版
《深入理解 Java 虛擬機(jī)》第一章 OpenJDK 12 環(huán)境搭建 - MacOS 26 版一、環(huán)境準(zhǔn)備OpenJDK 12 源碼下載安裝 JDK 11編譯時(shí)作為 Boot JDK安裝 Xcode 和 Command Line Tools安裝 Homebrew安裝依賴(lài)庫(kù)二、開(kāi)始編譯 JDK三、逐項(xiàng)修復(fù)問(wèn)題 1SDK does not contain libarclite at the path問(wèn)題 2redeclaration of C built-in type bool問(wèn)題 3too many arguments to function call,問(wèn)題 4too many arguments to function call問(wèn)題 5gif_lib.h - redeclaration of C built-in type bool問(wèn)題 6fp.h file not found一、環(huán)境準(zhǔn)備編譯環(huán)境JDK 12 源碼 macOS 26Darwin 26.5.2 新版 Xcode 26.4/clangOpenJDK 12 源碼下載瀏覽器打開(kāi)地址https://hg.openjdk.org/jdk/jdk12/ macOS 下載 gz 格式安裝 JDK 11編譯時(shí)作為 Boot JDK官網(wǎng)地址https://www.oracle.com/java/technologies/downloads/#java11安裝 Xcode 和 Command Line ToolsmacOS 26 無(wú)法安裝低版本 Xcode。官網(wǎng)地址https://developer.apple.com/download/all/?qxcode安裝驗(yàn)證192 JDK12% xcode-select--installxcode-select: note: Command line tools are already installed. UseSoftware UpdateinSystem Settings or the softwareupdatecommandline interface toinstallupdates提示已安裝證明安裝成功。在終端中執(zhí)行g(shù)cc -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官網(wǎng)https://brew.sh//bin/bash-c$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)終端運(yùn)行如下命令可查看安裝的版本信息~192 JDK12% brew-vHomebrew6.0.13安裝依賴(lài)庫(kù)打開(kāi)終端執(zhí)行如下命令brewinstallccache brewinstallfreetype brewinstallautoconf至此編譯環(huán)境就準(zhǔn)備好了。二、開(kāi)始編譯 JDK首先終端先切到下載的 JDK 目錄中下面的命令可以查看編譯參數(shù)bashconfigure--help好了開(kāi)始編譯編譯命令注意 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輸出下面的內(nèi)容證明這一步?jīng)]問(wèn)題。電腦配置顯示的不完全一樣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然后執(zhí)行編譯命令makeimages編譯報(bào)錯(cuò)可以參考一下第三章。編譯遇到問(wèn)題排查思路根據(jù)提示看構(gòu)建目錄底下的報(bào)錯(cuò)去修復(fù)問(wèn)題。build/macosx-x86_64-server-fastdebug/make-support/failure-logs然后每次重新編譯要注意清理上一次編譯的臟數(shù)據(jù)依次執(zhí)行makeclean然后執(zhí)行makedist-clean看到下面的命令就證明編譯成功了Finished building targetimagesinconfigurationmacosx-x86_64-server-fastdebug三、逐項(xiàng)修復(fù)核心矛盾JDK 12 代碼基于 C99 時(shí)代寫(xiě)法新版 clang 默認(rèn)啟用 C23 標(biāo)準(zhǔn)bool 變?yōu)閮?nèi)置關(guān)鍵字、() 無(wú)原型聲明被移除導(dǎo)致一系列編譯錯(cuò)誤。問(wèn)題 1SDK does not contain ‘libarclite’ at the pathGitHub 上下載對(duì)應(yīng)的依賴(lài)https://github.com/chenZai90/ios-Rescorce 把 arc 文件放到你提示的目錄底下即可問(wèn)題 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 是內(nèi)置類(lèi)型非宏#ifndef bool/#ifdef bool均無(wú)法攔截Objective-C 模式下 bool 同樣是內(nèi)置關(guān)鍵字。修復(fù)刪除 macOS 分支的 bool 定義添加stdbool.h當(dāng)前文件最終狀態(tài)#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/* 刪除以下整個(gè)塊 #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問(wèn)題 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 將其視為嚴(yán)格零參數(shù)原型 (void)。修復(fù)改為變參函數(shù)指針 (…)C17/C23/C 均合法共 3 個(gè)文件① 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);原則類(lèi)型聲明 / 強(qiáng)轉(zhuǎn)中的 () → (…)調(diào)用處如 (*sMlibFns[…].fptr)(參數(shù))不用動(dòng)。問(wèn)題 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)。修復(fù)第 47 行補(bǔ)全參數(shù)與定義一致// 修改前staticNSPrintInfo*createDefaultNSPrintInfo();// 修改后staticNSPrintInfo*createDefaultNSPrintInfo(JNIEnv*env,jstring printer);問(wèn)題 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 主動(dòng) #undef bool 后 typedef int bool;C23 下 bool 是內(nèi)置關(guān)鍵字。修復(fù)加條件保護(hù)——僅非 C 且 C 標(biāo)準(zhǔn)低于 C23 時(shí)定義保留舊環(huán)境行為#includestddef.h#if!defined(__cplusplus)(!defined(__STDC_VERSION__)||__STDC_VERSION__202311L)#ifdefbool#undefbool#endiftypedefintbool;#definefalse0#definetrue1#endif問(wèn)題 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 環(huán)境但該宏在現(xiàn)代 macOS SDK 中恒為 1誤入包含 Solaris/老 Mac 專(zhuān)屬 fp.h 的分支。修復(fù)加APPLE分流現(xiàn)代蘋(píng)果系統(tǒng)直接走 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

相關(guān)新聞

逆向工程中編碼與加密算法的識(shí)別、分析與實(shí)戰(zhàn)應(yīng)用

逆向工程中編碼與加密算法的識(shí)別、分析與實(shí)戰(zhàn)應(yīng)用

1. 從“菜雞”到入門(mén):為什么逆向工程繞不開(kāi)編碼與加密 剛接觸逆向工程的朋友,常常會(huì)卡在一個(gè)看似基礎(chǔ),實(shí)則至關(guān)重要的環(huán)節(jié):面對(duì)程序里一堆“亂碼”或者經(jīng)過(guò)變換的數(shù)據(jù),完全無(wú)從下手。你興致勃勃地打開(kāi)調(diào)試器&#xff0…

2026/8/2 12:25:40 閱讀更多
微信群聊總結(jié):從信息過(guò)載到價(jià)值提煉的方法論與實(shí)戰(zhàn)指南

微信群聊總結(jié):從信息過(guò)載到價(jià)值提煉的方法論與實(shí)戰(zhàn)指南

1. 從信息過(guò)載到價(jià)值提煉:為什么我們需要“群聊總結(jié)” 每天打開(kāi)微信,幾十個(gè)甚至上百個(gè)群聊的紅點(diǎn)提示,是不是讓你感到一陣陣的焦慮?工作群、項(xiàng)目群、家庭群、朋友群、興趣群……海量的信息碎片像潮水一樣涌來(lái),重要的通…

2026/8/2 12:25:40 閱讀更多
Unity構(gòu)建優(yōu)化利器:Build Report Tool深度解析與實(shí)戰(zhàn)指南

Unity構(gòu)建優(yōu)化利器:Build Report Tool深度解析與實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:為什么我們需要一個(gè)構(gòu)建報(bào)告工具? 如果你是一個(gè)Unity開(kāi)發(fā)者,尤其是負(fù)責(zé)項(xiàng)目發(fā)布和迭代的工程師,那么“構(gòu)建”這個(gè)詞對(duì)你來(lái)說(shuō)一定不陌生。從點(diǎn)擊菜單欄的“Build”按鈕,到最終生成一個(gè)可執(zhí)行文件或安裝包&a…

2026/8/2 12:25:40 閱讀更多
Python爬蟲(chóng)與數(shù)據(jù)分析實(shí)戰(zhàn):從零基礎(chǔ)到項(xiàng)目應(yīng)用的全棧學(xué)習(xí)指南

Python爬蟲(chóng)與數(shù)據(jù)分析實(shí)戰(zhàn):從零基礎(chǔ)到項(xiàng)目應(yīng)用的全棧學(xué)習(xí)指南

這次我們來(lái)看一套被B站技術(shù)區(qū)廣泛推薦的Python自學(xué)教程。這套教程號(hào)稱(chēng)“2026最細(xì)”,主打從零基礎(chǔ)到實(shí)戰(zhàn)應(yīng)用,核心覆蓋Python基礎(chǔ)、爬蟲(chóng)和數(shù)據(jù)分析三大模塊。如果你正在尋找一套系統(tǒng)性強(qiáng)、實(shí)戰(zhàn)案例多、能快速上手的Python學(xué)習(xí)資源,這篇文章會(huì)幫…

2026/8/2 13:36:10 閱讀更多
基于Seeed Studio XIAO RP2350的MicroPython嵌入式開(kāi)發(fā)實(shí)戰(zhàn)指南

基于Seeed Studio XIAO RP2350的MicroPython嵌入式開(kāi)發(fā)實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:當(dāng)RP2350遇上MicroPython如果你手頭有一塊Seeed Studio XIAO RP2350開(kāi)發(fā)板,正琢磨著怎么讓它快速動(dòng)起來(lái),而不是一頭扎進(jìn)復(fù)雜的C/C編譯環(huán)境里,那么MicroPython絕對(duì)是你應(yīng)該優(yōu)先考慮的選擇。我最近花了不少時(shí)間把玩這塊…

2026/8/2 13:36:10 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多