ubuntu1804源码编译jdk8
? ? 這里純粹自己弄著玩,因為以前沒有成功過,這里記錄一下,就是讓遇到問題的人可以規避問題,快速編譯自己的jdk。
? ? 相信很多學java的人都看過或者了解過一本書《深入理解java虛擬機》,里面就有介紹如何源碼編譯jdk。而且很多網上的編譯都會將這本書里面的截圖粘出來。
? ? 源碼編譯jdk,需要的環境如下:gcc,make,低版本的jdk,再就是源碼本身了。
? ? 一、準備依賴庫
? ? 所有的準備之前,需要先安裝依賴庫:
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev zip sudo apt-get install libcups2-dev // gcc g++ sudo apt-get install libasound2-dev sudo apt-get install libfreetype6-dev //freetype font sudo apt-get install libfontconfig1-dev //fontconfig1 font? ? 這一步如果不做,在進行編譯的時候就各種提示缺少什么,然后提示你sudo apt install xxx,其實不如提前做了。值得一提的是,后面兩個依賴是字體依賴,一個是freetype,一個是fontconfig。?
? ? 二、準備jdk7
? ? 這里需要說明的是,ubuntu1804上已經不能直接通過apt install 安裝openjdk7了,需要自己下載安裝。這里給出一個下載速度很快的網址:https://cdn.azul.com/zulu/bin/zulu7.44.0.11-ca-jdk7.0.292-linux_x64.tar.gz
? ? 這個openjdk7是免安裝版本,解壓之后直接放到一個目錄下(/usr/java)就可以使用了,需要設置環境變量,一般系統的環境變量都在/etc/profile文件和他包含的文件夾/etc/profile.d里面的sh文件,這里可以建立一個單獨的java.sh,如下所示:
huali@huali:~$ cat /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.7.0 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin export LANG=C? ?讓配置文件生效,命令行下運行source /etc/profile即可。
? ? jdk7準備好了,可以驗證一下:
huali@huali:~$ java -version openjdk version "1.7.0_292" OpenJDK Runtime Environment (Zulu 7.44.0.11-CA-linux64) (build 1.7.0_292-b07) OpenJDK 64-Bit Server VM (Zulu 7.44.0.11-CA-linux64) (build 24.292-b07, mixed mode)? ? 三、準備jdk8源碼?
? ? 源碼下載,有的是從oracle官網,有的是從hg上去克隆下載,還有別人給的csdn下載地址,速度堪憂,尤其是csdn給出的各種下載,版本老舊,若要支持內核4以上,還需要改hotspot/make/linux/Makefile里面的一個SUPPORTED_OS_VERSION變量。這里推薦下載碼云上的jdk8u源碼:https://gitee.com/ckl111/openjdk-jdk8u,速度很快,而且不用修改支持內核4的配置。
? ? 四、重新安裝make
? ? 編譯環境,這里主要對于gcc,make的說明,ubuntu1804的make版本好像是4以上,這里有必要換成3.81版本。
? ? 1、下載make源碼:https://ftp.gnu.org/gnu/make/,解壓縮
? ? 2、修改源碼glob/glob.c文件中的代碼,注釋兩行:
? ??
? ? 3、配置、編譯、安裝三步曲?
./configure --prefix=/usr/local/make-3.81 make sudo make install? ? 最好卸載原來的make: sudo apt remove make,然后替換新的make:sudo cp /usr/local/make-3.81/bin/make /usr/bin/make?
huali@huali:~$ make -v GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.This program built for x86_64-unknown-linux-gnu? ? 五、重新安裝gcc,g++?
? ? 通過apt install安裝的依賴庫之后,默認的gcc,g++現在是7.3版本,這個最好改為4.8,修改的辦法就是直接apt install安裝gcc-4.8 g++-4.8,然后替換/usr/bin目錄下的gcc,g++。
sudo apt install gcc-4.8 g++-4.8 sudo rm /usr/bin/gcc /usr/bin/g++ sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++? ?驗證一下:
huali@huali:~$ gcc --version gcc (Ubuntu 4.8.5-4ubuntu8) 4.8.5 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.? ? 六、開始編譯?
? ? 前面所有的準備工作都已經做好了,源碼也準備好,就可以開始配置,編譯:jdk8源碼中的configure并不是一個可執行程序,所以可以這樣來配置:
bash configure? ? 這一步可能會提示很多錯誤,如果是需要安裝libfreetype6-dev,而且機器上已經安裝了,那是因為freetype安裝之后,并不是以freetype存在,而是freetype2存在,所以需要通過兩個配置選項指定他們的依賴頭文件和依賴庫位置:
bash configure --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu? ? 沒有報錯,就可以繼續執行make指令了:
sudo make all? ? ?耗時一般是半小時,我這里虛擬機內存只準備了1G,所以耗時會久一些,加大內存,比如2G,應該就是半小時左右:
? ??
? ? ?編譯會生成兩個images,其實都是jdk,他們存放在images目錄下,還會生成一個單獨的jdk目錄,都在build/linux-x86_64-normal-server-release下。
? ? 主要參考了這篇文章:https://blog.csdn.net/dghgfhk/article/details/103356051,才順利編譯了jdk8,如果你遇到了問題,也可以到這里看看。
? ? 文中的安裝命令apt和apt-get其實都可以使用,就是安裝的意思,早期的ubuntu默認只有apt-get,現在apt,apt-get都可以使用。
總結
以上是生活随笔為你收集整理的ubuntu1804源码编译jdk8的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SqlServer2008操作总结
- 下一篇: ubuntu18.04安装pycharm