macOS Catalina + Xcode 12 編譯OpenJDK 14 錯(cuò)誤解決

環(huán)境

macOS Catalina 10.15.7

Xcode 12.3
autoconf 2.69
make 3.81
freetype 2.10.4
JDK 13
clang 12.0.0
clang++ 12.0.0

編譯

wget https://download.java.net/openjdk/jdk14/ri/openjdk-14+36_src.zip
unzip openjdk-14+36_src.zip
cd openjdk
sh ./configure
make all

報(bào)錯(cuò)信息處理

  1. src/hotspot/share/runtime/sharedRuntime.cpp報(bào)錯(cuò)

報(bào)錯(cuò)信息:

sharedRuntime.cpp:2875:85: error: expression does not compute the number of elements in this array; element type is 'double', not 'relocInfo' [-Werror,-Wsizeof-array-div]

解決方法:
編輯src/hotspot/share/runtime/sharedRuntime.cpp

# 修改前:
double locs_buf[20];
buffer.insts()->initialize_shared_locs((relocInfo*)locs_buf, sizeof(locs_buf) / sizeof(relocInfo));
# 修改后:
double locs_buf[20];
buffer.insts()->initialize_shared_locs((relocInfo*)locs_buf, (sizeof(locs_buf)) / (sizeof(relocInfo)));
  1. src/java/openjdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CSystemColors.m報(bào)錯(cuò)

報(bào)錯(cuò)信息:

src/java/openjdk/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]

解決方法:
編輯src/java.desktop/macosx/native/libawt_lwawt/awt/CSystemColors.m

# 修改前:
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)) {
  1. JavaVM Framework報(bào)錯(cuò)

原因:
Xcode 12.3 已經(jīng)不再包含JavaVM框架

解決方法:
首先執(zhí)行sh ./configure,然后修改下列文件
a) 編輯make/test/JtregNativeJdk.gmk

# 修改前:
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework JavaVM \
      -framework Cocoa -framework JavaNativeFoundation
# 修改后:
BUILD_JDK_JTREG_LIBRARIES_LIBS_libTestMainKeyWindow := -framework Cocoa -framework JavaNativeFoundation

b) 編輯build/macosx-x86_64-server-release/spec.gmk

# 刪除所有下列字符串
-F /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks

c) 編輯./build/macosx-x86_64-server-release/buildjdk-spec.gmk

# 刪除所有下列字符串
-F /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks

重新編譯

完成上述操作后重新執(zhí)行make all
最后在build/macosx-x86_64-server-release/images/jdk可以找到編譯好的jdk

參考信息

https://bugs.freebsd.org/bugzilla/attachment.cgi?id=212818&action=edit

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容