Manjaro通过源码编译jdk11

news2025/1/6 19:23:12

我在编译中遇到的最大的问题就是gcc版本问题,因manjaro是滚动更新,所以gcc也是很新的版本,导致无法编译jdk11

1 下载源码

网上根据关键词查找jdk源码,查找出来很多可以下载源码的链接,这里我们使用github去官方仓库,openjdk是托管在github的OpenJDK组织下,该组织下有各个版本的openjdk源码,不要直接使用jdk仓库,这个仓库存放的是当前正在开发的最新版本代码,我们要用的是jdk11,因此我们搜索jdk11仓库,我这里选择的是jdk11u这个库。

20230113095229

git clone https://github.com/openjdk/jdk11u.git

2 编译

按照readme的文档进行编译

20230113095821

2.1 configure

首先执行进入源码目录,执行bash configure此命令会检查编译需要的环境,如果报错,根据错误提示安装必要的编译工具。

注意事项:

  1. 安装必要的环境,包括gcc、autoconf、boot JDK等
  2. 编译一个jdk是需要依赖一个现有的jdk,另外对版本有要求,比如你编译的版本是N,则需要你电脑上有一个版本至少为N-1的版本,这里我编译jdk11时,我电脑事先安装了jdk11,理论上至少需要一个jdk10+
  3. gcc版本不能太老,也不能太新,这里一定要看你当前版本对应的文档,每个jdk版本对gcc版本要求也不一样,新版本jdk肯定能兼容更新的gcc,我在编译jdk11时,因为我的manjro是滚动更新,gcc版本是12,结果太新了导致编译报错。
bash configure
#……省略前边若干日志
#……
config.status: creating /home/chenkun/IdeaProjects/jdk11u/build/linux-x86_64-normal-server-release/buildjdk-spec.gmk
config.status: creating /home/chenkun/IdeaProjects/jdk11u/build/linux-x86_64-normal-server-release/compare.sh
config.status: creating /home/chenkun/IdeaProjects/jdk11u/build/linux-x86_64-normal-server-release/Makefile

====================================================
The existing configuration has been successfully updated in
/home/chenkun/IdeaProjects/jdk11u/build/linux-x86_64-normal-server-release
using default settings.

Configuration summary:
* Debug level:    release
* HS debug level: product
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services vm-structs zgc' 
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 11.0.18-internal+0-adhoc.chenkun.jdk11u (11.0.18-internal)

Tools summary:
* Boot JDK:       openjdk version "11.0.17" 2022-10-18 OpenJDK Runtime Environment (build 11.0.17+1) OpenJDK 64-Bit Server VM (build 11.0.17+1, mixed mode) (at /usr/lib/jvm/java-11-openjdk)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 12.2.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 12.2.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   16
* Memory limit:   31876 MB

如上,执行bash configure后,检查了环境包括Boot JDK,Toochain,C Compiler,C++ Compiler,这里c和c++编译器版本要一致,可以看到上面我的版本是12.2.0,这个版本太新会导致编译有问题,在building文档中也有说明,最新支持到7.4,更新的版本没有测试,可能兼容可能不兼容。
20230113101404

2.2 执行编译make images

make images
##省略中间若干日志
/home/chenkun/IdeaProjects/jdk11u/src/hotspot/os/linux/cgroupV1Subsystem_linux.hpp:105:31: error: non-static data member initializers only available with '-std=c++11' or '-std=gnu++11' [-Werror=c++11-extensions]
  105 |     CgroupV1Controller* _pids = NULL;
   ... (rest of output omitted)
* For target hotspot_variant-server_libjvm_objs_cgroupV2Subsystem_linux.o:
In file included from /home/chenkun/IdeaProjects/jdk11u/src/hotspot/os/linux/cgroupV2Subsystem_linux.cpp:25:
/home/chenkun/IdeaProjects/jdk11u/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp:54:32: error: non-static data member initializers only available with '-std=c++11' or '-std=gnu++11' [-Werror=c++11-extensions]
   54 |     CgroupController* _unified = NULL;
      |                                ^
/home/chenkun/IdeaProjects/jdk11u/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp:56:38: error: non-static data member initializers only available with '-std=c++11' or '-std=gnu++11' [-Werror=c++11-extensions]
   56 |     CachingCgroupController* _memory = NULL;
      |                                      ^
/home/chenkun/IdeaProjects/jdk11u/src/hotspot/os/linux/cgroupV2Subsystem_linux.hpp:57:35: error: non-static data member initializers only available with '-std=c++11' or '-std=gnu++11' [-Werror=c++11-extensions]
   57 |     CachingCgroupController* _cpu = NULL;
      |                                   ^
cc1plus: all warnings being treated as errors

* All command lines available in /home/chenkun/IdeaProjects/jdk11u/build/linux-x86_64-normal-server-release/make-support/failure-logs.
=== End of repeated output ===

No indication of failed target found.
Hint: Try searching the build log for '] Error'.
Hint: See doc/building.html#troubleshooting for assistance.

make[1]: *** [/home/chenkun/IdeaProjects/jdk11u/make/Init.gmk:305:main] 错误 2
make: *** [/home/chenkun/IdeaProjects/jdk11u/make/Init.gmk:186:images] 错误 2

以上编译报错了,根据搞错大概也看出编译器的版本最大只能支持到11,所以我这里需要安装另一个版本的编译器,这里就体现arch系linux的缺点了,滚动版本太激进会导致有的老软件存在各种版本不兼容。

2.3 解决编译器gcc版本问题

使用yay安装老版本的gcc,这里我和文档保持一致,文档说目前最新的已测试通过的版本是gcc7,这里我就安装gcc7:

$ yay gcc7
8 aur/armeb-none-eabi-gcc75-linaro-bin 7.5_2019.12-1 (+0 0.00) 
    The GNU Compiler Collection - cross compiler for ARM EABI (bare-metal) big-endian target.
7 aur/arm-none-eabi-gcc73-linaro 7.3_2018.05-1 (+0 0.00) (过时的: 2021-11-02) 
    The GNU Compiler Collection - cross compiler for ARM EABI (bare-metal) target.
6 aur/aarch64-linux-gnu-gcc75-linaro-bin 2019.12-1 (+0 0.00) 
    The GNU Compiler Collection - cross compiler for ARM64 target
5 aur/arm-linux-gnueabi-gcc75-linaro-bin 7.5.0-1 (+1 0.00) 
    The GNU Compiler Collection - cross compiler for ARM target
4 aur/arm-linux-gnueabihf-gcc75-linaro-bin 7.5-0 (+2 0.57) 
    The GNU Compiler Collection- cross compiler for ARMv7 EABI hard float target. (Linaro)
3 aur/gcc7-libs 7.5.0-4 (+15 0.02) (已安装)
    Runtime libraries shipped by GCC (7.x.x)
2 aur/gcc7-fortran 7.5.0-4 (+15 0.02) 
    Fortran front-end for GCC (7.x.x)
1 aur/gcc7 7.5.0-4 (+15 0.02) (已安装)
    The GNU Compiler Collection - C and C++ frontends (7.x.x)
==> 要安装的包 (示例: 1 2 3, 1-3 或 ^4)
==> 

如上,选择第一个就行了,因为我已经安装过了,所以显示已安装。

安装好了以后,需要把默认的gcc改成7版本的。

##1. 查看当前默认的gcc在哪里
which gcc
/usr/bin/gcc

which g++ 
/usr/bin/g++

##2. 备份原来的12.2.0版本,编译完jdk后还原,防止系统其他软件出现问题
cd /usr/bin
sudo cp gcc gcc.bak
sudo cp g++ g++.bak

## 3. 把gcc7设为默认
sudo cp gcc-7 gcc
sudo cp g++-7 g++

设置默认gcc后,重新执行bash configure ,然后make clean,然后再make images就成功了,编译好的jdk默认在./build/linux-x86_64-normal-server-release/images/jdk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov5-6.0网络添加小目标检测头 TensorRT部署

小目标检测使用TPH-YOLOv5 中的yolov5l-xs-tph.yaml模型;对其中的C3STR替换为C3模块;本文的TensorRT部署是基于yolov5l-xs-tph修改后的模型训练部署,其精度一般主要学习如何TensorRT部署,都是在wang-xinyu基础上简单修改&#xff…

中科大2008年复试机试题

中科大2008年复试机试题 文章目录中科大2008年复试机试题第一题问题描述解题思路及代码第二题问题描述解题思路及代码第三题问题描述解题思路及代码第四题问题描述解题思路及代码第一题 问题描述 一个十进制正整数转换成二进制有多少个1 示例1 输入:10 输出:2解题思路及代码…

数据分析之Excel

自定义格式 一、自定义格式的结构 方式一: 代码结构组成代码码分为四个部分,中间用”;”号分隔,具体如下: 正数格式;负数格式;零格式;文本格式 两个代码部分,则第一部分用于正数和零, 第二部分用于负数 一个代码部分,则该部分将用…

【跟彤砸学编程】——第二课(上)

嗨害嗨大家好,这里是彤砸! 今天我们来看看——编程到底是个啥? 上节课滴链接~【跟彤砸学编程】——第一课 程序是什么? 程序数据算法; 数据 生活中到处都是数据—— 1,2,3,是数据 A,B,C是数据 图片是由像素构成&…

【CSDN年度总结】一个四线城市的程序员-苟延残喘

个人简介 首先本人从事软件开发工作近8年,在北京工作5年,2020年1月13号回来老家工作,已经整整3年了!!! 现在做工业大数据方面工作,曾就职于华为做手机系统研发工作。 在一个四线城市坚守做一个…

速看|低代码平台公司流辰信息为实现企业高效办公积极赋能!

流辰信息,历经多年的砥砺奋斗,终于在低代码开发行业斩获越来越多的市场份额,是一家专注于研发低代码产品的低代码平台公司。在持续奋斗的年月中,流辰信息将持续增强研发创新能力,为各企业实现高效办公协作效率强劲赋能…

XC-15媒资管理系统集成

学习页面查询课程计划 需求分析 到目前位置,我们已经可以编辑课程计划信息并且上传课程视频,下一步我们要是心啊在线学习页面动态获取章节对应的视频并且进行播放,在线学习页面所需要的信息有两类,一类是课程计划信息,一类是课程学习信息(视频地址,学习进度等),如下图 在线学…

我与CSDN相识的一年

一、保持初心,笃定前行,回首2022 1、1 保持初心 回想起与CSDN的相识也是有一年多了。最初的相识也是我刚进入大学的时候。那个时候我还是懵懂无知的一个计算机类的大学生。在老师留下的一次任务中,我发现自己有点解决不了,想上网…

如何处理mybatis处理数据库关系中的多对一关系呢?

测试环境的搭建: 导入lombok: 不懂得小伙伴可移步这篇文章 新建实体类: 拿我们日常生活中最常见的举例:多个学生对应一个老师 对于学生这边而言,关联… 多个学生关联一个老师[多对一] 对于老师而言,集…

BGP(边界网关路由协议)小实验

目录实验要求ospf协议启动关于BGP基本知识点BGP关系建立的配置BGP的宣告实验要求 如下实验拓扑,各个自治系统区域和网段已经标注 基本的ip配置,环回配置就不再展示。 要求:除了R5的环回外,其他环回均可以互相访问 ospf协议启动…

C语言进阶——自定义类型——位段、枚举、联合

结构体 目录 一. 位段 1.概念 2.位段的内存分配 3.位段的跨平台问题 4.位段的应用 二. 枚举 1.枚举类型的定义 2.枚举的优点 3.枚举的使用 三. 联合(共用体) 1.联合类型的定义 ​编辑 2.联合的特点 3. 联合大小的计算 一. 位段 1.…

Git 合并多条commit

文章目录修改前开始修改第一种方式: 命令行第二种方式: Android Studio遇到冲突的解决办法第一种:修改到底,干就完事了第二种:回滚吧,有点慌修改前 开始修改 第一种方式: 命令行 git rebase -i 01fc32484fb2d2229aa20 // 这里对应的是init的…

osg fbo(四),将颜色缓冲区图片中的牛通过shader变绿

osg fbo&#xff08;三&#xff09;中&#xff0c;把整个屏幕变绿了&#xff0c;因为是把shader添加到了颜色缓冲区图片上了。如果只想把牛变绿&#xff0c;就需要把shader添加到原始场景根中。 即 osg::ref_ptr<osg::StateSet> statset_SceneRoot sceneRoot->getOr…

一、Java框架之Spring配置文件开发

文章目录1. 基础概念1.1 Spring Framework1.2 核心概念产生背景IoC、Bean、DI2. 入门案例2.1 普通Maven项目2.2 IoC入门案例2.3 DI入门案例3. bean配置3.1 bean基础配置bean的基础配置bean的别名配置bean的作用范围3.2 bean实例化实例化方法1&#xff1a;构造方法实例化方法2&a…

Chrome浏览器http访问跨越问题与解决方法

一、Chromium 内核&#xff08;<93版本&#xff09;跨越问题解决方法 设置Chrome浏览器的 disable-web-security, 实现跨域访问后端的接口。这个参数可以降低chrome浏览器的安全性&#xff0c;禁用同源策略&#xff0c;利于开发人员本地调试。 解决办法&#xff1a; 新建一…

【区间合并】AcWing 803. 区间合并

803. 区间合并 文章目录题目描述输入格式&#xff1a;输出格式&#xff1a;数据范围输入样例输出样例方法&#xff1a;区间合并解题思路代码复杂度分析&#xff1a;题目描述 给定 nnn 个区间 [li,ri][l_i,r_i][li​,ri​]&#xff0c;要求合并所有有交集的区间。 注意如果在端…

按键精灵免字库本地识别OCR

按键精灵免字库识别—基于百度飞桨PaddleOCR的RapidOCR前言为什么为什么有大漠了还要使用其它OCR为什么要使用RapidOCR开发PaddleOCR介绍PaddleOCR使用衍生项目版——小白方案按键精灵post调用图片转base64方法转json方法post调用JVM版改为mavenOcrEngine路径idea Run配置网页版…

Hudi系列7:使用SparkSQL操作Hudi

文章目录一. SparkSQL连接Hudi1.1 Hive配置1.2 SparkSQL连接Hudi二. 创建表2.1 常规的建表2.2 CTAS三. 插入数据四. 查询数据五. 更新数据5.1 普通5.2 MergeInto六. 删除数据七. Insert Overwrite参考:一. SparkSQL连接Hudi 1.1 Hive配置 我们需要将Hive 的 metastore服务独立…

【Ubuntu18.04系统开启防火墙】

【Ubuntu18.04系统开启防火墙】1 查看防火墙状态2 开启防火墙3 关闭防火墙4 允许开启防火墙时&#xff0c;ssh连接和22端口许可4.1 允许tcp 22端口通过防火墙4.2 允许SSH服务4.3 防火墙规则重启4.4 验证端口号是否开启1 查看防火墙状态 sudo ufw status2 开启防火墙 sudo ufw…

如何重装windows10系统(超详细图文版)

目录1.&#xff08;制作装机盘&#xff09;准备好装机U盘2. (下载驱动软件&#xff09;(※这步很重要&#xff09;3.&#xff08;下载镜像&#xff09;准备好要安装的新操作系统镜像4.&#xff08;查询bios快捷键&#xff09;查询你的主板品牌&#xff0c;找到你主板品牌进入bi…