編譯環境
ubuntu20
Ubuntu里用戶可以自行選擇安裝GCC或CLang來進行編譯,但必須確保最低的版本為GCC 4.8或者CLang 3.2以上,官方推薦使用GCC 7.8或者CLang 9.1來完成編譯。
源碼
https://github.com/openjdk/jdk/tree/jdk-12%2B33
安裝gcc
sudo apt-get install build-essential
在編譯過程中需要依賴FreeType、CUPS等若干第三方庫
sudo apt-get install libfreetype6-dev
sudo apt-get install libcups2-dev
#libxll-dev這個找不到 不影響就先不管
sudo apt-get install libxll-dev
sudo apt-get install libxext-dev
sudo apt-get install libxrender-dev
sudo apt-get install libxrandr-dev
sudo apt-get install libxtst-dev
sudo apt-get install libxt-dev
sudo apt-get install libasound2-dev
sudo apt-get install libffi-dev
sudo apt-get install autoconf
安裝openjdk11
sudo apt-get install openjdk-11-jdk
查看參數
#運行查看參數
bash configure --help
報錯了
執行下列代碼
sudo apt-get install autoconf
?然后繼續執行bash configure --help 就可以看到參數了
參數詳解
參數值 | 默認值 | 可選值 | 參數含義 |
---|---|---|---|
--with-debug-level=<level> | release | release、fastdebug、slowde-bug | 設置編譯的級別,越往后進行的優化措施就越少,帶的調試信息就越多,還有一些虛擬機調試參數必須在特定模式下才可以使用 |
·--enable-debug | 等效于--with-debug-level=fastdebug | ||
--with-native-debug-symbols=<method> | none、internal、external、zipped | 確定調試符號信息的編譯方式 | |
--with-version-string=<string> | 設置編譯JDK的版本號,譬如java-version的輸出就會顯示該信息;這個參數還有--with-version-?<part>=<value>的形式,其中part可以是pre、opt、build、major、minor、security、patch之一,用于設置版本號的某一個部分。 | ||
--with-jvm-variants=<variant>[,<variant>...] | server、client、minimal、core、zero、custom | 編譯特定模式(Variants)的HotSpot虛擬機,可以多個模式并存 | |
--with-jvm-features=<feature>[,<feature>...] | 針對--with-jvm-variants=custom時的自定義虛擬機特性列表(Features),可以多個特性并存,由于可選值較多,請參見help命令輸出 | ||
--with-target-bits=<bits> | 指明要編譯32位還是64位的Java虛擬機,在64位機器上也可以通過交叉編譯生成32位的虛擬機 | ||
--with-<lib>=<path> | boot-jd、freetype、cups、x、alsa、libffi、jtreg、libjpeg、giflib、libpng、lcms、zlib | 用于指明依賴包的具體路徑,通常使用在安裝了多個不同版本的Bootstrap JDK和依賴包的情況 | |
·--with-extra-<flagtype>=<flags> | 其中flagtype可選值為cflags、cxxflags、ldflags,分別代表C、C++和Java代碼的參數 | 用于設定C、C++和Java代碼編譯時的額外編譯器參數 | |
--with-conf-name=<name> | 指定編譯配置名稱,OpenJDK支持使用不同的配置進行編譯,默認會根據編譯的操作系統、指令集架構、調試級別自動生成一個配置名稱,譬如“linux-x86_64-server-release”,如果在這些信息都相同的情況下保存不同的編譯參數配置,就需要使用這個參數來自定義配置名稱 |
參數測試
?configure命令承擔了依賴項檢查、參數配置和構建輸出目錄結構等多項職責,如果編譯過程中需要的工具鏈或者依賴項有缺失,
?命令執行后將會得到明確的提示,并且給出該依賴的安裝命令
bash configure --enable-debug --with-jvm-variants=server
會報錯
apt-get install zip
然后會提示如下
按照錯誤提示的安裝即可
sudo apt-get install libfontconfig1-dev
?然后繼續執行bash命令
如果一切順利的話,就會收到配置成功的提示,并且輸出調試級別,Java虛擬機的模式、特性,使用的編譯器版本等配置摘要信息,如下所示:
編譯
#清理目錄
make clean
make dist-clean#編譯
make product-images#producet-images可替換為下列的
hotspot:只編譯HotSpot虛擬機
hotspot-<variant>:只編譯特定模式的HotSpot虛擬機
docs-image:產生JDK的文檔鏡像
test-image:產生JDK的測試鏡像
all-images:相當于連續調用product、docs、test三個編譯目標
bootcycle-images:編譯兩次JDK,其中第二次使用第一次的編譯結果作為Bootstrap JDK
clean:清理make命令產生的臨時文件
dist-clean:清理make和configure命令產生的臨時文件
?
緊接著
build/配置名稱/jdk? ?目錄下
就可以看到完整的編譯結果了,把它復制到JAVA_HOME目錄,就可以作為一個完整的JDK來使用
運行
---------------------------持續更新20240605-------------------------------------------------------------