近日,荷蘭開發(fā)者 Remy van Elst 通過自己的博客控訴了 snap 自動更新所帶來的問題,并決定刪除 snap,同時選擇放棄 Ubuntu。
升級到 Ubuntu 20.04 版本后,Remy 通過 snap 安裝了 CLion,因為與手動下載安裝相比,這樣顯然更方便。但就在上個周末,他發(fā)現(xiàn) CLion 自動更新了。實際上,當他注意到更新時,該程序進程已由于更新導致的錯誤而終止。
在自動更新過程中,幾個關(guān)鍵的插件被破壞。Remy 表示,不僅僅是截圖中的插件出了問題,用于交叉編譯到 ARM 的插件也成了主要問題。
對他來說,更糟糕的是 Ubuntu 無法禁用 snap 更新,這一點 “甚至比 Windows 還差”。三年前就曾有用戶在 snap 官方論壇中提出這個問題,下面的討論一直持續(xù)到今年六月底,但 snap 官方人員始終沒有給出解決方案。
有網(wǎng)友將這篇博客文章貼到了 reddit 和 Hacker news 等論壇上,不少人提出可通過 snap revert clion 回滾到先前的版本,但在 Remy 看來,這種治標不治本的行為是沒有意義的。他認為,用戶對軟件包的掌控權(quán)更重要。
最后,Remy 選擇了終極式解決方式:完全刪除 snap。他提到自己之后可能會安裝 Linux Mint,而非 Ubuntu,因為 Linux Mint 前不久禁用了 snap,并允許用戶配置更新。
最近在閱讀《深入理解Java虛擬機》,其中有一小節(jié)實戰(zhàn)是自己編譯JDK,實際操作下來后遇到問題不少,為此特地記錄,也希望可以給大家?guī)硪恍﹨⒖迹?/span>
平臺及工具: Windows 10 + WSL(ubuntu 20.04) + CLion(2021.2.2)
OpenJDK12下載地址: https://hg.openjdk.java.net/jdk/jdk12/
編譯工具版本推薦:
編譯依賴庫:
工具 | 庫名稱 | 安裝命令 |
FreeType | The FreeType Project | sudo apt-get install libfreetype6-dev |
CUPS | Common UNIX Printing System | sudo apt-get install libcups2-dev |
X11 | X Window System | sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev |
ALSA | Advanced Linux Sound Architecture | sudo apt-get install libasound2-dev |
libffi | Portable Foreign Function Interface Library | sudo apt-get install libffi-dev |
Autoconf | Extensible Package of M4 Macros | sudo apt-get install autoconf |
Bootstrap JDK 準備:
編譯FastDebug版,僅含Server模式的HotSpot虛擬機命令:
bash configure --enable-debug --with-jvm-variants=server
# 嫌寫那么多麻煩,直接用下面這個:point_down:,不過這個是生成release版本的,不利于debug
bash configure
configure命令會進行依賴項檢查,參數(shù)配置和構(gòu)建輸出目錄結(jié)構(gòu)等操作,所以依賴缺失會得到明確提示:
ZIP安裝命令:
sudo apt-get install zip
繼續(xù)檢查...繼續(xù)安裝缺失的依賴...
成功界面:
依賴檢查通過后,執(zhí)行 make images 命令執(zhí)行整個OpenJDK的編譯,作用是編譯出整個JDK鏡像
不出所料,編譯報錯:
充分利用了搜索引擎,以及認真閱讀了 building.md 文件后,發(fā)現(xiàn)應該是gcc的版本問題,默認安裝的是9,但實際需要的是7,于是把9給卸載了,重新安裝了個7
# 卸載命令
sudo apt-get remove gcc-9
# 安裝7
sudo apt-get install gcc-7
sudo apt-get install g++-7
# 如果上述命令安裝后,gcc --version能查出版本而不會報錯,就無需使用以下命令
# 或者已有7和9兩個版本,但默認用的是9,也可用以下命令修改為7
# 設置默認選項
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
sudo update-alternatives --config g++
萬事俱備只欠東風。先 make dist-clean 清理一波編譯生成的臨時文件,接著一波流:
bash configure --enable-debug --with-jvm-variants=server
make images
漫長的等待后...沒有報錯!!!
測試一波:
./build/*/images/jdk/bin/java -version
編譯成功:
目錄結(jié)構(gòu):
導入JDK源碼文件,open file 選擇 MakeFile ,有彈窗清除 clean ,然后一直確認即可
等待導入......
接著會發(fā)現(xiàn)幫你生成了一堆的 targets ,將根目錄Mark Directory as 一下
然后選 all 即可,打開編輯,Executable選擇編譯出來的 java 命令,Before launch移除 Build
具體設置各項參數(shù)如圖:
找到 java.c 文件,打個斷點,直接 Debug 啟動(開始你的表演):
配置 -version 只是測試一下是不是真的能夠調(diào)試了而已,如果想要調(diào)試某個Java類呢
最終配置如圖:
《深入理解Java虛擬機:JVM高級特性與最佳實踐》(第三版)1.6實戰(zhàn):自己編譯JDK
原文鏈接:https://www.cnblogs.com/Zhouge6/p/15781939.html?utm_source=tuicool&utm_medium=referral