首页 > 系统相关 >Ubuntu 22.04.3 LTS 编译 OpenJDK 12

Ubuntu 22.04.3 LTS 编译 OpenJDK 12

时间:2023-12-23 19:01:13浏览次数:48  
标签:LTS bin gcc 12 OpenJDK sudo usr install strip

基于《深入理解 Java 虚拟机》第 3 版

1.配置环境

更新软件源

sudo apt update

获取源码

wget https://hg.openjdk.org/jdk/jdk12/archive/06222165c35f.zip

构建基础编译环境

sudo apt install build-essential

此处安装的 gcc 及 g++ 的版本为 11 ,需要替换为 7。参考这个链接,更新软件源后进行多版本管理。

sudo apt update
sudo apt install gcc-7
sudo apt install g++-7

# 多版本管理,数字越大优先级越高
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 30
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 30

安装其他依赖
参考文档,《深入理解 Java 虚拟机》在复制文档时未删去句尾的标点,这里要注意。

安装 Bootstrap JDK
sudo apt install openjdk-11-jdk

2.编译

# 编译FastDebug版、仅含Server模式的HotSpot虚拟机
bash configure --enable-debug --with-jvm-variants=server

此处 configure 命令会进行依赖项检查,缺失的直接按照提示安装即可。
一切顺利就会收到配置成功的提示,并输出摘要信息。如果多次编译,必须先执行make cleanmake dist-clean
image

执行整个 JDK 的编译

make images

此处 JDK12 对于 make 4.3 的适配有问题,需要手动替换代码。

# Param 2 - (optional) name of file to store value in
DependOnVariableHelper = \
    $(strip \
        $(eval -include $(call DependOnVariableFileName, $1, $2)) \
        $(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\
          $(call MakeDir, $(dir $(call DependOnVariableFileName, $1, $2))) \
          $(if $(findstring $(LOG_LEVEL), trace), \
              $(info NewVariable $1: >$(strip $($1))<) \
              $(info OldVariable $1: >$(strip $($1_old))<)) \
          $(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \
              $(call DependOnVariableFileName, $1, $2))) \
        $(call DependOnVariableFileName, $1, $2) \
    )

# Main macro

替换为

# Param 2 - (optional) name of file to store value in
DependOnVariableHelper = \
    $(strip \
        $(eval $1_filename := $(call DependOnVariableFileName, $1, $2)) \
        $(if $(wildcard $($1_filename)), $(eval include $($1_filename))) \
        $(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\
          $(call MakeDir, $(dir $($1_filename))) \
          $(if $(findstring $(LOG_LEVEL), trace), \
              $(info NewVariable $1: >$(strip $($1))<) \
              $(info OldVariable $1: >$(strip $($1_old))<)) \
          $(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \
              $($1_filename))) \
        $($1_filename) \
    )

# Main macro

image

3.验证编译结果

./build/linux-x86_64-server-fastdebug/jdk/bin/java --version

image

4.参考链接

https://hg.openjdk.org/jdk/jdk12/file/06222165c35f/doc/building.html
https://blog.csdn.net/qq_25825005/article/details/127162939
https://askubuntu.com/questions/1406962/install-gcc7-on-ubuntu-22-04
https://askubuntu.com/questions/445162/trying-to-execute-update-alternatives-command-specified-in-an-instrutional-docum

标签:LTS,bin,gcc,12,OpenJDK,sudo,usr,install,strip
From: https://www.cnblogs.com/tienz1/p/17923453.html

相关文章

  • P3612 [USACO17JAN] Secret Cow Code S
    P3612[USACO17JAN]SecretCowCodeS自我感想哎,又是一道写不出来的。完全没有这样的思路,只会笨b模拟只能得40.解题前应该的思考通过题目给的数据可以知道纯暴力模拟肯定爆空间。(基本否定正推)这里根据题目所说的,其实可以知道是一个初字符串通过固定的规律形成新的字符串。(......
  • 12/23每日总结
    因为学习pythonweb没有学数据分析,但是比较感兴趣,所以来了要用到的库为numpy跟pandas,介绍如下:NumPy系统是Python的一种开源的数值计算扩展,这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩阵(matrix))。pandas是基于NumPy的一种工具,该工......
  • 12/23
    manacher核心在 O(n)的时间内,求出一个长度为n的字符串的最长回文子串过程预处理:将 abbacd变#a#b#b#a#c#d#&amp;amp;nbsp;避免偶回文没有回文中心中心扩展:枚举每个回文中心位置i,看最多能向两边扩展多少将以每个i为回文中心的最大回文半径记为pi记录x,使得以x为......
  • 12.23模拟赛
    T1正解:莫反推导出来的整除分块,证明不会:然后直接快速幂来算是\(O(\sqrt{m}·log\:n)\)的,过不了剩下三个点。考虑到模数很小且为质数,用费马小定理预处理幂次然后去算,复杂度\(O(\mathbf{10007}·log\:n+\sqrt{m})\),注意字符串处理\(n\)。点击查看代码#include<bits/stdc++.......
  • 2023-12-23训练总结
    T1计数ProblemDescriptionInputOutputSampleInputCopy210SampleOutputCopy90DataConstraint忘记初始化了调了半个小时。维护\(f_{i,0/1}\)表示长度为\(i\),最高位为\(0\)/不为\(0\)的合法方案数。明显有:\[f_{i,0}\getsf_{i-1,1}\\f_{i,1}\g......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士兵中用时最......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士......
  • 2023.12.23模拟赛总结
    前言:这次比赛又是tm的AB组一起打,tm的题目怎么一点质量都没有啊,三道简单题+一道模板题,而且模板我还没做过,而且我的一个部分换成那个模板就A了这次300pts,rank3,感觉不太好T1dp,\(f[i][0/1]\)表示i位置填0/1的方案数,直接转移,写高精度T2感觉应该放T4,实际最难首先,我们设跳楼机从0开......
  • #9 2023.12.18
    怎么做题速度单调递减了。464.THUPC2024Pre省流:我是演员。M我过的题。K我过的题。暴力打表就行了,我在本地打了三分钟就出答案了!很快。J我过的题。考虑\(v\)什么时候对\(len=k\)没有贡献。那就是\(v\)把序列分成了若干区间\([l,r]\),\(ban\)掉的区间就是\([......
  • 洛谷 P1229
    题目链接有4种结构。对于只有一个儿子(度为1)的结点,其子节点在左/右不影响先序/后序的遍历顺序,总树数*2。即每多一个度为1的结点,二叉树数量翻倍。即当先根序列为\(.....XY.....,\)后根序列为\(.........YX...\)时翻倍。求出这种结构的个数即可。#include<bits/stdc++.h>usi......