windows 平臺編譯openjdk12
先前準備,oracle官網下載jdk11,安裝好,並配置好環境變數,用來編譯openjdk12使用的。
下載openjdk12的原始碼,下載地址:https://jdk.java.net/java-se-ri/12
下載cgywin,是一個在windows上面執行的類似於linux環境的。下載地址:http://www.cygwin.com/,安裝外掛的時候,推薦選用國內的映象,http://mirrors.163.com/cygwin/。
安裝vs2017。去微軟官網下載就可。
1.https://sourceforge.net/projects/freetype/files/地址下載freetype。解壓之後,放在D盤,然後用vs0217開啟D:\freetype-2.11.0\builds\windows\vc2010目錄的freetype.sln檔案,編譯。把生成在軟體根目錄的objs裡面lib和
2.cygwin安裝的時候記得勾選make外掛,版本必須是4.2.x,我選擇的是4.2.1,不然後期編譯make all的時候會報下面異常!
$ make images Building target 'images' in configuration 'windows-x86_64-server-fastdebug' make[3]: *** 沒有規則可製作目標“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS.vardeps”,由“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS_batch” 需求。 停止。 make[3]: *** 正在等待未完成的任務.... make[2]: *** [make/Main.gmk:70:buildtools-langtools] 錯誤 2 make[2]: *** 正在等待未完成的任務.... make[3]: *** 沒有規則可製作目標“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/make-support/vardeps/make/ModuleWrapper.gmk/java.base/ORDERED_CFG_VARIANTS.vardeps”,由“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/support/modules_libs/java.base/jvm.cfg” 需求。 停止。 make[3]: *** 正在等待未完成的任務.... make[2]: *** [make/Main.gmk:158:java.base-copy] 錯誤 2 ERROR: Build failed for target 'images' in configuration 'windows-x86_64-server-fastdebug' (exit code 2) No indication of failed target found. Hint: Try searching the build log for '] Error'. Hint: See doc/building.html#troubleshooting for assistance. make[1]: *** [/cygdrive/i/jdk13/src/make/Init.gmk:312:main] 錯誤 2 make: *** [/cygdrive/i/jdk13/src/make/Init.gmk:186:images] 錯誤 2
cygwin安裝好了之後,記得安裝其他三個外掛/setup-x86_64 -q -P autoconf -P unzip -P zip(用cmd切換到之前下載好setup-x86_64的目錄執行指令碼),當然這三個外掛也可以安裝的時候同make一樣勾選也可
。
3.前面下載好的openjdk原始碼解壓在cygwin使用者的根目錄裡面,然後編譯./configure --enable-debug --with-target-bits=64 --disable-warnings-as-errors
windows環境會報以下異常,提供修復辦法
編譯OpenJDK12:a microsoft compiler is required
make/autoconf目錄下,有一個toolchain.m4,開啟,找到compiler is required或者Thre result from running it was:
註釋相應的AC_MSG_ERROR()這一段if,或者把AC_MSG_ERROR改成AC_MSG_RESULT。
error: Target CPU mismatch. We are building for x86_64 but CL is for "?"; expected "x64".
找到make/autoconf目錄下,有一個toolchain.m4,註釋相應的AC_MSG_ERROR()這一段if,或把AC_MSG_ERROR改成AC_MSG_RESULT,找到了cl.exe,識別不到版本,不管他!
編譯OpenJDK12:Only bundled freetype can be specified on Mac and Windows
開啟make/autoconf/lib-freetype.m4,找到這一句。註釋這一段if,或者把AC_MSG_ERROR改成AC_MSG_RESULT。
c:/cygwin64/home/Administrator/jdk12/test/hotspot/gtest/utilities/test_json.cpp 語法錯誤
解決辦法刪除test_json.cpp!
上面解決好了之後。
4.除錯:
剛剛make all生成了exe,現在使用$make hotspot-ide-project。生成vs工程檔案,位於openjdk12/build/windows-x86_64-server-fastdebug/ide/hotspot-visualstudio/jvm.vcxproj,雙擊開啟載入即可,上方選擇server-fastdebug即可開始除錯。除錯可能遇到safefetch32丟擲異常,這是正常情況,該異常會被外部SEH捕獲,直接繼續除錯就好。在share\runtime\javaCalls.hpp中的call函式處下斷進行除錯!