博客 / 詳情

返回

Windows 10 下編譯 64 位 OpenJDK 8 並單步調試

Windows 10 下編譯 64 位 OpenJDK 8

軟件版本

  • 操作系統:Windows 10
    image.png
  • Cygwin:3.5.4-1
    image.png
  • Visual Studio:2010 英文版
    image.png
  • freetype: 2.7
    image.png
  • Boot JDK:7
    image
  • 編譯的 OpenJDK 版本:8
    image.png

    安裝 boot JDK

從下載鏈接下載 JDK,然後在 Windows 上安裝。安裝完成後配置 JAVE_HOME 環境變量,如下圖所示:

bootjdk02.png

在已有的 Path 環境變量加入 %JAVA_HOME%\bin ,如下圖所示:
在這裏插入圖片描述
配置完成後在 cmd 中執行 java -version 命令,可以看到對應的版本信息,則證明已配置好,如下圖所示:
image
## 安裝 Cygwin

從下載鏈接下載安裝程序,然後在 Windows 上安裝。
設置安裝的路徑,這裏設置的是 E:\cygwin64,如下圖所示:

cygwin01.png

選擇要額外安裝的命令,包括:binutilscpiom4makeprocps-ngunzipzip
選擇安裝 binutils 命令,如下圖所示:

cygwin02.png

選擇安裝 cpio 命令,如下圖所示:

cygwin03.png

選擇安裝 m4 命令,如下圖所示:

cygwin04.png

選擇安裝 make 命令,如下圖所示:

選擇安裝 procps-ng 命令,如下圖所示:

cygwin06.png

選擇安裝 unzip 命令,如下圖所示:

cygwin07.png

選擇安裝 zip 命令,如下圖所示:

cygwin08.png

安裝完成後在已有的 Path 環境變量加入 E:\cygwin64\bin 路徑,如下圖所示:
image.png

安裝 VS 2010

從下載鏈接下載 VS 2010 英文版(這裏一定要用英文版),然後在 Windows 上安裝。

安裝的時候設置安裝路徑,注意路徑中不能有空格,如下圖所示:

vs01.png

安裝的特性只需要勾選 Visual C++,如下圖所示:
在這裏插入圖片描述

在已有的 Path 環境變量加入 E:\MicrosoftVisualStudio10.0\VC\bin 路徑,如下圖所示:
image.png

下載並編譯 freetype

從下載鏈接下載 freetype 源碼並解壓。

然後打開 VS 2010,點擊 File->Open->Project/Solution,選擇 freetype 解壓路徑下的 builds\windows\vc2010\freetype.sln 文件並打開,如下圖所示:

vs03.png

vs04.png

右鍵後點擊 Properties,如下圖所示:

vs06.png

配置編譯成靜態鏈接庫,選擇 Configuration 為 Release Multithreaded,Platform 選擇 x64, Target Name 修改為 freetype,Target Extension 修改為 .lib,Configuration Type 修改為 Static libraty(.lib),如下圖所示:

vs07.png

點擊 Build-> Build Solution 編譯靜態鏈接庫,編譯完成後在 freetype 解壓路徑下的 objs\vc2010\x64 目錄下會生成 freetype.lib 文件,如下圖所示:

image.png

配置編譯靜態鏈接庫,主要是 Target Extension 修改為 .dll,Configuration Type 修改為 Dynamic Library(.dll),如下圖所示:

vs10.png

點擊 Build-> Build Solution 編譯動態鏈接庫,編譯完成後在 freetype 解壓路徑下的 objs\vc2010\x64 目錄會生成 freetype.dll 文件,如下圖所示:

vs11.png

然後在 freetype 解壓路徑下創建 lib 目錄,把 freetype.lib 和 freetype.dll 兩個文件拷貝到這個 lib 目錄下,如下圖所示:
在這裏插入圖片描述

下載並編譯OpenJDK 8

從下載鏈接下載 OpenJDK 8 的源碼並解壓。如果你使用的軟件版本和本文的軟件版本一致,則推薦下載替換文件 替換到解壓後相對應的目錄下,不然編譯的時候會遇到報錯。不一致的話則手動修改解壓後的文件,見後面的編譯遇到的問題及解決辦法。

在 OpenJDK 8 的解壓路徑下執行 ./configure --with-freetype='/cygdrive/e/freetype-2.7' --with-target-bits=64 --enable-debug -disable-ccache 命令,其中 --with-freetype 替換為實際的 freetype 的路徑,執行成功後的提示如下圖所示:

image.png

configture01.png

然後執行 make all 命令開始編譯,等待編譯結束,編譯成功後會在 OpenJDK 8 解壓路徑下的build 目錄生成 windows-x86_64-normal-server-fastdebug 目錄,編譯後的 JDK 就在這個目錄下,如下圖所示:

image.png

image.png

進入到 build\windows-x86_64-normal-server-fastdebug\jdk\bin 目錄,執行 java -version,就可以看到輸出如下圖所示:

image.png

這個時候就擁有了一個在自己電腦上編譯出來的 JDK 8 了。

編譯遇到的問題及解決辦法

Your cygwin is too old

執行 ./configure --with-freetype='/cygdrive/e/freetype-2.7' --with-target-bits=64 --enable-debug -disable-ccache 命令後可能會遇到報錯提示: Your cygwin is too old.,如下圖所示:

image.png

這個是因為 OpenJDK 8 解壓路徑下的 common\autoconf\generated-configure.sh 腳本有 Bug ,這個腳本中把 Cygwin 的版本寫死了,確保你的版本大於 1.7 之後,把這裏的版本修改為你自己的版本號即可。如果你的版本和本文使用的版本一致,則直接可以下載替換文件後替換即可,如下圖所示:

image.png
image.png

time is more than 10 years from present

執行 make all 命令後,可能會遇到報錯提示: time is more than 10 years from present,如下圖所示:

compileerror01.png

這個是因為 OpenJDK 8 解壓路徑下的 jdk\make\src\classes\build\tools\generatecurrencydata\GenerateCurrencyData.java 這個類中校驗了不能超過 10 年。可以手動將這裏的 10 修改為 100, 或者直接可以下載替換文件後替換即可。替換完成後執行 make clean 命令清理,然後再執行 make all 命令,如下圖所示:
在這裏插入圖片描述
image.png

images-only

執行 make all 命令後,可能會遇到報錯提示: Main.gmk:136: images-only] Error 2 ,如下圖所示:

image.png

這個是因為 OpenJDK 8 解壓路徑下的 jdk\make\CreateJars.gmk 文件有兩處地方少了回車符號,如下圖所示:

image.png

可以手動給這兩處增加回車符號,方法為在 insert 模式下,先按 Ctrl + V ,然後再按 Ctrl + M,或者直接可以下載替換文件後替換即可。替換完成後執行 make clean 命令清理,然後再執行 make all 命令編譯,如下圖所示:


編譯成功後輸出如下圖所示:

image.png

Windows 10 下單步調試 OpenJDK 8

創建調試項目

修改 OpenJDK 8 解壓路徑下的 hotspot\make\windows\create.bat 腳本中的內容,將腳本中默認的 cygwin64 的安裝路徑修改為實際的安裝路徑,如下圖所示:

image.png

image.png

image.png

進入到 VS 2010 安裝路徑下的 VC\bin\amd64,執行 vcvars64.bat,執行完成後不退出這個命令行,如下圖所示:

image.png

在同一個命令行進入到 OpenJDK 8 解壓路徑下的 hotspot\make\windows 目錄,執行 create.bat E:\jdk-jdk8-b120\jdk 命令創建 VS 2010 項目文件,如下圖所示:

image.png
image.png

配置單步調試

將 OpenJDK 8 解壓路徑下 build\windows-x86_64-normal-server-fastdebug\jdk\bin\java.diz 解壓到所在的路徑下,如下圖所示:

image.png

用 VS 2010 打開 OpenJDK 8 解壓路徑下的 hotspot\build\vs-amd64\jvm.vcxproj 文件,如下圖所示:

image.png

右鍵後點擊 Properties,配置 Debugging 參數,Configuration 選擇 compiler2_fastdebug,Platform 選擇 x64,Command 配置編譯出來的 java.exe ,Command Arguments 增加 -version 參數,這裏相當於就是配置執行 java -version 命令,Environment 配置 JAVA_HOME 為編譯出來的 JDK 路徑,如下圖所示:

image.png

配置完成後,按 F7 重新 build 一下項目,如下圖所示:
image.png

image.png

在 OpenJDK 8 解壓路徑下 share/vm/runtime/arguments.cpp 中的 init_system_properties() 打個斷點,如下圖所示:

image.png

點擊調試按鈕後,代碼在斷點處停下,如下圖所示:
image.png

單步調試遇到的問題及解決辦法

創建調試項目報錯

執行 create.bat 腳本報如下錯誤:
The code execution cannot proceed because mspdb 100.dll was not found. Reinstalling the program may fix this problem.

createproject01.png

是因為沒有在同一個命令行執行 vcvars64.bat 見 創建調試項目

單步調試報錯

點擊 Debug 按鈕啓動調試報錯如下:
'java.exe': Loaded 'E:\openjdk8\openjdk\build\windows-x86_64-normal-server-fastdebug\jdk\bin\java.exe', Symbols loaded.
'java.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\apphelp.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\advapi32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\msvcrt.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\sechost.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\rpcrt4.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\user32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\win32u.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\gdi32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\gdi32full.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\msvcp_win.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\ucrtbase.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.1110_none_60b5254171f9507e\comctl32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\imm32.dll', Cannot find or open the PDB file
The thread 'Win64 Thread' (0x1048) has exited with code 4 (0x4).
The thread 'Win64 Thread' (0x1efc) has exited with code 4 (0x4).
The program '[2308] java.exe: Native' has exited with code 4 (0x4).

debug01.png

這個需要重新 build 一下項目,見配置單步調試

參考

Win10下編譯OpenJDK8
Windows10下編譯openjdk8
編譯openjdk && 調試java
Windows10下vs2010單步調試jvm
Java虛擬機原理分析之Win7下VS2010編譯OpenJDK8與單步調試HotSpot VM過程詳細記錄
building open jdk 8

user avatar eisuto 頭像 dm2box 頭像 deltaf 頭像 nian_5aedc008c1353 頭像 shadowck 頭像 longbig 頭像 lianhuatongzina 頭像 zoux 頭像
8 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.