Windows使用WSL編譯自己的JDK

Windows使用WSL編譯自己的JDK

    • 一、獲取源碼
    • 二、構建編譯環境
    • 三、進行編譯
        • 驗證編譯結果
    • 四、配置環境變量
    • 五、使用CLion進行調試

參考資料:《深入理解java虛擬機》

筆者使用的操作系統為windows,但是windows編譯自己的jdk還是比較麻煩的,所以我們就需要使用wsl構建一個ubuntu操作系統環境,然后編譯。所幸構建ubuntu操作系統還是比較簡單的,在微軟商店搜索ubuntu,下載18版本即可。下載完成后打開,就可以看到ubuntu操作系統的命令行窗口了,使用cd命令進入/mnt文件夾,這個文件夾下的c文件夾對應C盤,d對應D盤,以此類推。

在這里插入圖片描述

一、獲取源碼

現在我們需要獲取OpenJDK源碼,激怒JDK12版本的倉庫頁面,點擊左側的“Browse”,進入jdk12的根目錄,然后點擊左邊的“zip”即可下載當前版本打包好的源碼,到本地直接解壓即可。

這里強烈建議一定要仔細閱讀源碼中的doc/building.html,可以使用網頁翻譯功能也是能看懂的。

二、構建編譯環境

打開ubuntu,依次執行下面的代碼即可

工具安裝命令
GCCsudo apt-get install build-essential
FreeTypesudo apt-get install libfreetype6-dev
CUPSsudo apt-get install libcups2-dev
X11sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
ALSAsudo apt-get install libasound2-dev
libffisudo apt-get install libffi-dev
Autoconfsudo apt-get install autoconf
jdk11sudo apt-get install openjdk-11-jdk

三、進行編譯

如編譯FashDebug版、僅含Server模式的HotSpot虛擬機,命令應為:

bash configure --enable-debug --with-jvm-variants=server

注:此處如果帶著調試、定制化需求去編譯自己的OpenJDK,可以使用“bash configure --help”查詢OpenJDK提供的編譯參數,有興趣可以自己嘗試探索。

運行編譯命令后:
在這里插入圖片描述

可以看到成功頁面,如果GCC版本太高的話,gcc下會出現報錯信息,此處請注意檢查。

還有一個坑就是出現了以下報錯信息:

Could not find required tool for ZIPEXE

在這里插入圖片描述

這是由于沒有安裝zip導致的,執行 sudo apt-get install zip即可

接下來就可以輸入 make images 執行整個OpenJDK編譯了,此處編譯會耗費大量時間,筆者大概花費了一個小時左右才編譯完成(R7 5800H)。

Creating jdk image
Creating CDS archive for jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'macosx-x86_64-server-fastdebug'

在這里插入圖片描述

當彈出以上文字時說明編譯成功

驗證編譯結果

進入編譯成功后的jdk中的bin目錄

執行 java -version命令,可以看到以下結果

在這里插入圖片描述

說明編譯成功,此目錄已經可以作為一個jdk使用

四、配置環境變量

  • 使用vim配置環境變量

sudo vim ~/.bashrc

  • 使用編輯模式在文檔最后輸入
    # 這里要更改成你自己的目錄export JAVA_HOME=/mnt/e/download/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdkexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=.:${JAVA_HOME}/bin:$PATH
  • 編輯完成后,使用:w 回車保存

使用:wq 退出vim

退出vim后輸入以下代碼保存環境變量

source ~/.bashrc

  • 查看Java 版本信息

java -version

  • 得到輸出結果
openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f)
OpenJDK 64-Bit Server VM (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f, mixed mode)

可以看到現在的jdk已經成了我們自己編譯的jdk

五、使用CLion進行調試

現在我們在原來的WIndows操作系統上打開CLion,然后選擇遠程連接,連接到自己的WSL上,打開jdk12的源碼

在這里插入圖片描述

在這里插入圖片描述

現在,我們就可以編譯jdk12的源碼并且使用自己調試的jdk了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163603.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163603.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163603.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

張弛語言課奇幻劇配音,一場特殊的體驗

在為奇幻劇進行配音時,配音藝術家要將自己投入到一個充斥著魔法、幻想生物和超自然現象的虛構世界中。奇幻劇側重于構建一個超越現實的幻境,因此配音工作要求既要呈現角色的個性化特征,也要與劇中的奇幻氛圍相得益彰。以下是進行奇幻劇配音的…

主內存與工作內存數據交換八個步驟:

一:鎖定:把主內存內一個變量標識為一條線程獨占的狀態; 二:解鎖:把一個處于鎖定狀態的變量釋放出來。釋放后可被其他線程鎖定; 三:讀取:把一個變量的值從主內存傳輸到工作內存中&a…

12.你知道Spring的哪些擴展點,在什么時候調用?

Spring中非常非常多的擴展接口,當然你也不需要全部回答,可以挑重點回答: 執行BeanFactoryPostProcessor的postProcessBeanFactory方法1 /*** 2 * 作用: 在注冊BeanDefinition的可以對beanFactory進行擴展 后 3 * 調用時機: Ioc加載時注冊BeanDefinition 的時候會調用 4 */…

【C/C++】簡單模擬題解

有52張樸克牌,使它們全部正面朝上。從第2張牌開始,把凡是2的倍數位置上的牌翻成正面朝下;接著從第3張牌開始,把凡是3的倍數位置上的牌正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;接著從第4張牌開始&am…

太神奇了!視頻監控技術居然還能操作

隨著科技的迅猛發展,視頻監控系統在各個領域中的應用變得越來越廣泛。從保護公共安全到提高工作效率,視頻監控為我們提供了一種強大而多功能的工具。 視頻監控技術已經成為我們日常生活和工作中不可或缺的一部分。通過視頻監控,我們能夠實時監…

shell循環語句 for while until

目錄 什么是循環語句 概念 for循環 格式 while循環 格式 until 循環 格式 實驗 for (1)計算1到100的和 ?編輯 (2)100以內的偶數 (從0開始到100結束,每次加2步 打印的都是偶數) &…

完美解決:在Ubuntu18.04下ROS Melodic基于python3的cv_bridge的一點子歪門邪道

由于在Ubuntu18.04下ROS Melodic是運行在python 2.7環境下,而我的程序需要運行在anaconda創建的python 3.x環境里,這就需要用到cv_bridge這個庫,而不出意外的,各種報錯,比如: from cv_bridge.boost.cv_bri…

貝銳向日葵:獨家算法如何支撐不斷地產品創新?

作為國民級的專業遠程控制品牌,貝銳旗下的“向日葵遠程控制”一直在遠程控制領域不斷積累創新。 近年來,遠程控制軟件本身開始成為企業的主流遠程業務工具以及個人場景下的日常必備軟件,向日葵遠程控制也在不斷地完善并創新產品。 比如在前…

pip安裝tkinter模塊失敗 No matching distribution found for tkinter

我想使用Python創建一個簡單的桌面應用程序, 這個應用程序依賴于tkinter, 然而,當我嘗試安裝過程時,出現了錯誤。 $ pip install tkinter ERROR: Could not find a version that satisfies the requirement tkinter (from versions: none) ERROR: No matching distributio…

泛微齊業成數電發票+樂企平臺解決方案等您查收

近年來,國家持續發布加快數字化發展、深化稅收征管制度改革的綱領性政策,與組織費用管理相關的發票、單據、檔案等逐步完成數字化轉型;2022年,全面數字化的電子發票正式執行,現在已有33地成為數電票試點。 全國數電票…

rust每日一庫 rand 生成隨機數

文章目錄 生成隨機值生成隨機數生成范圍內隨機數生成自定義類型隨機值從一組字母數字字符創建隨機密碼從一組用戶定義字符創建隨機密碼 總結 生成隨機值 rust中官方并沒有像以他語言一樣,rust并沒有官方并沒有提供生成隨機數的工具,所以我們要借助rand包…

實現文本選中變色

單個文本變色 <div id"myText">vfadsfgase</div> const myText document.getElementById(myText); myText.addEventListener(mouseup, () > {const selection window.getSelection();if (selection.toString() ! ) {const range selection.getRang…

Could not resolve host: gitlab.example.com問題解決

請按照以下步驟檢查和修復 Hosts 文件&#xff1a; 打開 Hosts 文件&#xff1a;在 Windows 上&#xff0c;Hosts 文件位于 C:\Windows\System32\drivers\etc\hosts&#xff0c;可以使用記事本或其他文本編輯器打開。檢查是否存在正確的映射關系&#xff1a;確保在 Hosts 文件…

深入剖析預約上門服務系統源碼:構建高效服務的代碼之旅

在本文中&#xff0c;我們將深入研究預約上門服務系統的源碼&#xff0c;透過代碼的層層剖析&#xff0c;揭示系統背后的技術奧秘。我們將關注系統的核心功能&#xff0c;并通過代碼示例演示其實現過程&#xff0c;為讀者提供一個深度技術解讀的體驗。 1. 技術棧選擇&#xf…

教育機構拒絕“數據陷阱”,群碩將英孚新一代教學管理系統搬上桌

為什么小機構年年擔心招生不夠&#xff0c;英孚卻令學生家長趨之若鶩&#xff1f; 區別就在教學管理方式。為了更好地管理分布全球的校區、學生和老師&#xff0c;英孚應用了一套教學管理系統&#xff0c;幫助學校管理學員&#xff0c;幫老師智慧排課&#xff0c;幫助家長記錄…

Spring框架學習 -- 讀取和存儲Bean對象

目錄 &#x1f680;&#x1f680; 回顧 getBean()方法的使用 根據name來獲取對象 再談getBean() (1) 配置掃描路徑 (2) 添加注解 ① spring注解簡介 ② 對類注解的使用 ③ 注解Bean對象的命名問題 ④ 方法加Bean注解 (3) Bean 注解的重命名 (4) 獲取Bean對象 -- …

基于YOLO模型建筑工地個人防護設備目標檢測

使用安全裝備可以保護他們免受建筑工地的意外事故。據統計&#xff0c;每年有數以萬計的工人在建筑工地受到嚴重傷害&#xff0c;造成終生困難。然而&#xff0c;通過自我監控來確保工人穿戴個人防護裝備非常重要。在這方面&#xff0c;需要一個準確和快速的系統來檢測工人是否…

微信小程序其他環境都能顯示在正式環境顯示不出來

踩坑日記 用了uni.getImageInfo 用了uni.getImageInfo 本地開發環境&#xff0c;測試環境全都可以&#xff0c;就是更新到正式環境不顯示。后面看代碼百度了這個api發現圖片所涉及的地址需要在小程序配置download域名白名單 https://uniapp.dcloud.net.cn/api/media/image.ht…

termios.h 頭文件包含問題

報奇怪的錯誤&#xff0c;解決掉其他錯誤或告警信息后&#xff0c;調整頭文件的順序。

地埋式積水監測儀廠家批發,實時監測路面積水

地埋式積水監測儀是針對城市內澇推出的積水信息監測采集設備&#xff0c;采用超聲波傳感技術和超聲波抗干擾功能&#xff0c;對路面的積水進行實時精準的監測。該設備能夠在零下-5℃至高溫70℃的嚴寒酷暑環境下可靠運行。它對城市道路積水進行實時監測并上報到監測系統之中&…