2023 編譯Windows JDK8(親測(cè)有效)

安裝JDK8,Cygwin,VS2010,freetype
下載jdk源碼
配置
編譯
一.安裝Boostrap JDK
先有母雞,才有蛋
要想編譯jdk8,首先得有jdk8。很明顯,這是一只母雞,我們需要它來下蛋。
建議使用鏡像下載站安裝jdk8
https://mirrors.huaweicloud.com/java/jdk/此處使用華為云的jdk鏡像
選擇jdk8啥版本都可以,下載后安裝,配置環(huán)境變量
二.安裝Cygwin
https://www.cygwin.com
下載安裝,一路下一步,安裝路徑不要含有空格和中文

選擇清華鏡像(https://mirrors.tuna.tsinghua.edu.cn),下一步

選擇完整,搜索并安裝如下包
binutils,cpio,mercurial,zip,unzip,make,m4,procps-ng
安裝完下一步
三.安裝Visual Studio 2010英文版,(PowerISO)
由于VS2010過于久遠(yuǎn),所以目前VS2010直接安裝包并不可用(微軟下載服務(wù)器域名更換)
所以使用iso鏡像的方法來安裝。
首先下載VS2010的ISO鏡像,什么版本的都可以
https://my.visualstudio.com/Downloads?q=visual studio 2010
使用微軟官方下載(需要登錄微軟賬號(hào))

此處選擇Visual Studio Professional 2010(2.189GB),點(diǎn)擊下載
得到一個(gè)iso鏡像,并用PowerISO掛載到一個(gè)盤,雙擊盤符
自動(dòng)打開安裝界面(如果沒有,請(qǐng)手動(dòng)點(diǎn)擊盤里面的setup.exe)
圖中為Visual Studio?Uitimate 2010(來源與互聯(lián)網(wǎng))




安裝目錄不要含有空格和中文
最后僅勾選C++就可以了
四.獲取freetype
https://github.com/ubawurinna/freetype-windows-binaries/releases
此處是已編譯好的freetype
選擇最新releases下載,解壓后將文件夾下對(duì)應(yīng)電腦架構(gòu)的文件夾名稱改為lib
例如:freetype/release dll/win64改為lib,建議把lib文件夾復(fù)制出release dll文件夾放在freetype目錄下。
五.獲取JDK源碼
打開Cygwin,在終端 輸入
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/
下載最新OpenJDK jdk8u源碼到j(luò)dk8u目錄

cd jdk8u/
進(jìn)入jdk目錄
ls
檢查一下文件是否完整

sh ./get_source.sh
獲取完整源碼
這一步不能省略,過程可中斷,下一次執(zhí)行自動(dòng)下一步

執(zhí)行完這里可能會(huì)出現(xiàn)這個(gè)情況,這個(gè)應(yīng)該不是網(wǎng)絡(luò)的問題,我試了很多次都這樣,這導(dǎo)致jdk根目錄下jdk文件夾的丟失。如果你直接忽略該步驟,將在編譯過程中出現(xiàn)該錯(cuò)誤

理智方法:借助wsl在linux執(zhí)行g(shù)et_source.sh后復(fù)制jdk8u文件夾到Windows(√)

(打開瀏覽器https://hg.openjdk.org/jdk8u/jdk8u/jdk/archive/tip.zip下載(建議魔法)
并解壓到j(luò)dk根目錄就可以解決了)
六.?配置文件
chmod +x ./configure
賦予文件執(zhí)行權(quán)限
./configure --with-freetype=/cygdrive/e/freetype?--with-target-bits=64 --enable-debug
參數(shù):
--with-freetype=freetype位置,替換成你自己的
--with-target-bits=目標(biāo)架構(gòu)(64,86)
--enable-debug?開啟調(diào)試模式

七.編譯器前的準(zhǔn)備
接下來是一個(gè)不斷試錯(cuò)和改錯(cuò)的過程。
在jdk根目錄,終端輸入make all(全量編譯),然后直接報(bào)錯(cuò)。
以下是各種報(bào)錯(cuò)的解決方法(按順序來的)
1.?中文亂碼,可以用記事本或notepad--等打開jdk8u/build/windows-x86_64-normal-server-fastdebug/build.log查看
2.?‘xxxx’?不是內(nèi)部或外部命令,也不是可運(yùn)行的程序


若終端輸出如上內(nèi)容,則說明是vc環(huán)境變量有問題,說實(shí)話,這就是個(gè)坑
由于Microsoft SDKs這個(gè)文件夾中間有個(gè)空格的原因,導(dǎo)致無法正常獲取sdks
解決方法,就是更改該文件夾的名稱。
編輯jdk8u/build/windows-x86_64-normal-server-fastdebug/vs-env/set-vs-env.sh

檢查一下有沒有路徑中含有空格的(除了Program Files之類)
結(jié)果一眼就看到了Microsoft SDKs,把整個(gè)文件中的Microsoft SDKs替換成MicrosoftSDKs(隨便)
并實(shí)際去修改這個(gè)文件夾的名稱(這可能會(huì)導(dǎo)致部分程序無法正常使用,你可以復(fù)制Microsoft SDKs后再改名)
另外還需要應(yīng)用一下這個(gè)配置,所以
編輯jdk8u\common\autoconf\generated-configure.sh
查找”Trying to extract Visual Studio environment variables”
在下面幾行找到”cmd /c extract-vs-env.bat | $CAT”一行.在前面加上#注釋掉

最后執(zhí)行第六個(gè)步驟

看到這個(gè)就說明配置成功
其他也是類似的情況,把路徑中有空格的文件夾名空格去掉就好了
3.error C2220: warning treated as error - no object file generated
詳見:https://learn.microsoft.com/zh-cn/cpp/error-messages/compiler-errors-1/compiler-error-c2220
由于編譯cpp過程中,使用/WX的選項(xiàng),編譯器將所有的警告視為了錯(cuò)誤(坑啊),關(guān)掉,關(guān)掉,必須關(guān)掉。
編輯jdk8u\hotspot\make\windows\makefiles\compile.make
查找/WX,找到

這一行,并去掉 /WX.如果要忽略所有警告,把/W3改為/W0
八.全量編譯
make all

用時(shí)13分鐘,編譯成功
jdk8u\build\windows-x86_64-normal-server-fastdebug\images

j2re-image這個(gè)就是jre,j2sdk-image就是jdk,可以直接使用

java版本信息部分可以在jdk8u\hotspot\make\hotspot_version更改
九.?增量編譯
jdk8u\jdk\src\share目錄下,就是各個(gè)Java包的源碼,可以隨意查看和更改。
更改完在終端輸入make images進(jìn)行增量編譯(兩分鐘左右)

十.小芝士
PROGRA~1:Program Files
PROGRA~2:Program Files (x86)
MICROS~1:? ??Microsoft
It's possible to build both Windows and Linux binaries from WSL. To build Windows binaries, you must use a Windows boot JDK (located in a Windows-accessible directory).
Note that while it's possible to build on WSL, testing is still not fully supported.
????????????????????????????????????????????????????????????????????????????????????????????????----------Building the JDK Doc