ubuntu1804源码编译jdk8

朱雀 2022-10-23 04:56 421阅读 0赞
  1. 这里纯粹自己弄着玩,因为以前没有成功过,这里记录一下,就是让遇到问题的人可以规避问题,快速编译自己的jdk
  2. 相信很多学java的人都看过或者了解过一本书《深入理解java虚拟机》,里面就有介绍如何源码编译jdk。而且很多网上的编译都会将这本书里面的截图粘出来。
  3. 源码编译jdk,需要的环境如下:gcc,make,低版本的jdk,再就是源码本身了。

一、准备依赖库

  1. 所有的准备之前,需要先安装依赖库:
  2. sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev zip
  3. sudo apt-get install libcups2-dev // gcc g++
  4. sudo apt-get install libasound2-dev
  5. sudo apt-get install libfreetype6-dev //freetype font
  6. sudo apt-get install libfontconfig1-dev //fontconfig1 font
  7. 这一步如果不做,在进行编译的时候就各种提示缺少什么,然后提示你sudo apt install xxx,其实不如提前做了。值得一提的是,后面两个依赖是字体依赖,一个是freetype,一个是fontconfig

二、准备jdk7

  1. 这里需要说明的是,ubuntu1804上已经不能直接通过apt install 安装openjdk7了,需要自己下载安装。这里给出一个下载速度很快的网址:[https://cdn.azul.com/zulu/bin/zulu7.44.0.11-ca-jdk7.0.292-linux\_x64.tar.gz][https_cdn.azul.com_zulu_bin_zulu7.44.0.11-ca-jdk7.0.292-linux_x64.tar.gz]
  2. 这个openjdk7是免安装版本,解压之后直接放到一个目录下(/usr/java)就可以使用了,需要设置环境变量,一般系统的环境变量都在/etc/profile文件和他包含的文件夹/etc/profile.d里面的sh文件,这里可以建立一个单独的java.sh,如下所示:
  3. huali@huali:~$ cat /etc/profile.d/java.sh
  4. export JAVA_HOME=/usr/java/jdk1.7.0
  5. export JRE_HOME=$JAVA_HOME/jre
  6. export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  7. export PATH=$PATH:$JAVA_HOME/bin
  8. export LANG=C

让配置文件生效,命令行下运行source /etc/profile即可。

  1. jdk7准备好了,可以验证一下:
  2. huali@huali:~$ java -version
  3. openjdk version "1.7.0_292"
  4. OpenJDK Runtime Environment (Zulu 7.44.0.11-CA-linux64) (build 1.7.0_292-b07)
  5. OpenJDK 64-Bit Server VM (Zulu 7.44.0.11-CA-linux64) (build 24.292-b07, mixed mode)

三、准备jdk8源码

  1. 源码下载,有的是从oracle官网,有的是从hg上去克隆下载,还有别人给的csdn下载地址,速度堪忧,尤其是csdn给出的各种下载,版本老旧,若要支持内核4以上,还需要改hotspot/make/linux/Makefile里面的一个SUPPORTED\_OS\_VERSION变量。这里推荐下载码云上的jdk8u源码:[https://gitee.com/ckl111/openjdk-jdk8u][https_gitee.com_ckl111_openjdk-jdk8u],速度很快,而且不用修改支持内核4的配置。

四、重新安装make

  1. 编译环境,这里主要对于gcc,make的说明,ubuntu1804make版本好像是4以上,这里有必要换成3.81版本。
  2. 1、下载make源码:[https://ftp.gnu.org/gnu/make/][https_ftp.gnu.org_gnu_make],解压缩
  3. 2、修改源码glob/glob.c文件中的代码,注释两行:
  4. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk_size_16_color_FFFFFF_t_70][]
  5. 3、配置、编译、安装三步曲
  6. ./configure --prefix=/usr/local/make-3.81
  7. make
  8. sudo make install
  9. 最好卸载原来的make: sudo apt remove make,然后替换新的makesudo cp /usr/local/make-3.81/bin/make /usr/bin/make
  10. huali@huali:~$ make -v
  11. GNU Make 3.81
  12. Copyright (C) 2006 Free Software Foundation, Inc.
  13. This is free software; see the source for copying conditions.
  14. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
  15. PARTICULAR PURPOSE.
  16. This program built for x86_64-unknown-linux-gnu

五、重新安装gcc,g++

  1. 通过apt install安装的依赖库之后,默认的gcc,g++现在是7.3版本,这个最好改为4.8,修改的办法就是直接apt install安装gcc-4.8 g++-4.8,然后替换/usr/bin目录下的gcc,g++。
  2. sudo apt install gcc-4.8 g++-4.8
  3. sudo rm /usr/bin/gcc /usr/bin/g++
  4. sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
  5. sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

验证一下:

  1. huali@huali:~$ gcc --version
  2. gcc (Ubuntu 4.8.5-4ubuntu8) 4.8.5
  3. Copyright (C) 2015 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions. There is NO
  5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

六、开始编译

  1. 前面所有的准备工作都已经做好了,源码也准备好,就可以开始配置,编译:jdk8源码中的configure并不是一个可执行程序,所以可以这样来配置:
  2. bash configure
  3. 这一步可能会提示很多错误,如果是需要安装libfreetype6-dev,而且机器上已经安装了,那是因为freetype安装之后,并不是以freetype存在,而是freetype2存在,所以需要通过两个配置选项指定他们的依赖头文件和依赖库位置:
  4. bash configure --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu
  5. 没有报错,就可以继续执行make指令了:
  6. sudo make all
  7. 耗时一般是半小时,我这里虚拟机内存只准备了1G,所以耗时会久一些,加大内存,比如2G,应该就是半小时左右:
  8. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk_size_16_color_FFFFFF_t_70 1][]
  9. 编译会生成两个images,其实都是jdk,他们存放在images目录下,还会生成一个单独的jdk目录,都在build/linux-x86\_64-normal-server-release下。
  10. 主要参考了这篇文章:[https://blog.csdn.net/dghgfhk/article/details/103356051][https_blog.csdn.net_dghgfhk_article_details_103356051],才顺利编译了jdk8,如果你遇到了问题,也可以到这里看看。
  11. 文中的安装命令aptapt-get其实都可以使用,就是安装的意思,早期的ubuntu默认只有apt-get,现在apt,apt-get都可以使用。

发表评论

表情:
评论列表 (有 0 条评论,421人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDK8HashMap

    > 进入这篇文章之前,我想清楚的说一说怎么去理解`HashMap`源码。它先是使用的`hash`算法,那么哈希算法需要注意的那就是怎么`hash`,怎么减少冲突,怎么避免冲突。

    相关 ubuntu1804编译jdk8

        这里纯粹自己弄着玩,因为以前没有成功过,这里记录一下,就是让遇到问题的人可以规避问题,快速编译自己的jdk。     相信很多学java的人都看过或者了解过一本书《深