macOS sonoma 14.4.1编译JDK 12

macOS sonoma 14.4.1编译JDK 12

  • 环境
  • 参考文档
  • 开始
    • 简述问题
    • 心路历程
    • 着手解决
    • 最终解决(前面有点啰嗦了,可以直接看这里)

记录一次靠自己看代码解决问题的经历(总之就是非常开心)。

首先,先diss一下bing,我差一点就放弃了。
在这里插入图片描述

环境

  • macOS sonoma 14.4.1
  • Boot JDK 11
  • Xcode 15.3

参考文档

openJdk 源码中building文件(路径如下: /doc/building)

开始

简述问题

不整虚的,先放上我自己碰到的问题。

configure: The tested number of bits in the target (64) differs from the number of bits expected to be found in the target (32)

简单来说,就是期望构建64版本的JDK,但是我的机器是32位,未通过校验。

心路历程

给我整不自信了,被某东坑了?我靠,这会可是已经过了质保时间了啊(哭)。赶紧自查,还好是64位(虚惊一场)。

# 自查指令,我的机器上返回 "arm64"
uname -m

于是开始上网冲浪,先是问的Bing,什么手把手教学啊的文章映入眼帘,但是扫了几眼,人家没碰到我的问题,而且很顺利。没辙,问问chatGpt,给了我一个配置参数(我去指令都让我自己背下来了) : --with-target-bits=64。试了之后仍然没什么用,再问也没了结果。只好再去问Bing,并且提供了更详细的描述,结果告诉我Open JDK不能在ARM上运行。扭头去问gpt,结果如下(还是gpt牛):
在这里插入图片描述
询问到此为止(我已经不知道该怎么组织提示词了)。

看看终端执行编译指令给出的错误信息,发现有这么个东东(这好像是个脚本啊)。

/jdk12-06222165c35f/build/.configure-support/generated-configure.sh: line 84: 5: Bad file descriptor

着手解决

  1. 找到提示信息所在行数(搜索关键字: The tested number of bits in the target),比对错误信息。
    结论:“OPENJDK_TARGET_CPU_BITS” 这个参数为 32,
  2. 猜测,该脚本会根据机器信息,为该参数赋不同的值。根据关键字(OPENJDK_TARGET_CPU_BITS)检索,寻找跟该参数赋值逻辑有关的内容(OPENJDK_TARGET_CPU_BITS -> VAR_CPU_ARCH -> host_cpu),并打印在终端。
  3. 发现代码中,对于mac系统的赋值只存在于一处,因为自己比较懒且对sh的语法不熟,便做了最简单的修改(见最后)。

步骤二扩展:

# 1、找出OPENJDK_TARGET_CPU_BITS赋值的位置(共2处)
# 1.1 不符合
if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then# A reduced build is requestedCOMPILE_TYPE="reduced"OPENJDK_TARGET_CPU_BITS=32if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; thenOPENJDK_TARGET_CPU=x86elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; thenOPENJDK_TARGET_CPU=sparcelseas_fn_error $? "Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9" "$LINENO" 5fi# 1.2 看不懂不确定,但是也只剩这一处了
# ... and setup our own variables. (Do this explicitly to facilitate searching)OPENJDK_TARGET_OS="$VAR_OS"if test "x$VAR_OS_TYPE" != x; thenOPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE"elseOPENJDK_TARGET_OS_TYPE="$VAR_OS"fiif test "x$VAR_OS_ENV" != x; thenOPENJDK_TARGET_OS_ENV="$VAR_OS_ENV"elseOPENJDK_TARGET_OS_ENV="$VAR_OS"fiOPENJDK_TARGET_CPU="$VAR_CPU"OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH"OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS"# 2、找出VAR_CPU_BITS赋值的位置(就是这里了,所以但凡是arm架构的,都被当成了32位机器(淦..)。)case "$host_cpu" in....arm*)VAR_CPU=armVAR_CPU_ARCH=armVAR_CPU_BITS=32VAR_CPU_ENDIAN=little;;....esac

最终解决(前面有点啰嗦了,可以直接看这里)

将VAR_CPU_BITS改成64即可。

case "$host_cpu" in....arm*)VAR_CPU=armVAR_CPU_ARCH=armVAR_CPU_BITS=32VAR_CPU_ENDIAN=little;;....esac

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

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

相关文章

2.2 Java全栈开发前端+后端(全栈工程师进阶之路)-前端框架VUE3-基础-Vue基本语法

文本渲染指令 文本渲染指令-v-html与v-text Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue的模板都是 合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。 在前面,我们一直使用的是字符串插…

Django数据库创建存储及管理

一、什么是ORM Django的ORM(Object-Relational Mapping)是Django框架中一个非常重要的组件。ORM可以让开发者以面向对象的方式操作数据库,而不需要直接编写SQL语句。 具体来说,Django ORM提供了以下功能: 模型定义:开发者可以在Django应用中定义Python类来表示数据库表,这些…

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中,如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库,它基于 Apache POI 封装了简单易用的 API,使得我们能够方便地读取、写入 Excel 文件。Easy…

GitHub Copilot 简单使用

因为公司安全原因,并不允许在工作中使用GitHub Copilot,所以,一直没怎么使用。最近因为有一些其它任务,所以,试用了一下,感觉还是很不错的。(主要是C和Python编程) 一:常…

夸克网盘批量转存分享查询软件

夸克网盘批量转存分享软件,未解决批量转存困难问题以及批量分享困难问题,故研发此软件,无任何广告。 支持功能 夸克文件目录查询 自定义分页页码,分页数量 批量转存夸克文件 批量分享夸克文件 自定义导入夸克链接 使用教程…

ubuntu外置网卡配置AP模式

外置网卡RTL8811CU设置 UBUNTU使用RTL8811CU网卡(包含树莓派) 外置网卡配置AP模式流程 1. 检查网卡支持情况(是否支持AP模式) iw list找到以上部分,发现支持AP 2. 安装依赖 sudo apt-get update sudo apt-get in…

SpringBoot的ProblemDetails

1.RFC 7807 之前的项目如果出现异常,默认跳转到error页面。或者是抛出500 异常。 但是对于前后端分离的项目,Java程序员不负责页面跳转,只需要 把错误信息交给前端程序员处理即可。而RFC 7807规范就是将异常 信息转为JSON格式的数据。这个…

Docker——生产案例(如何修改Docker部署服务的端口映射)

目录 前言 1. 测试环境中新建Apache服务 2.停止容器和Docker服务 3.修改容器配置 4.重启Docker服务并访问测试 前言 由于接替原工作人员的工作之后,上级需要修改Docker部署Apache服务的端口映射,将89端口修改为99端口,那我们该如何修改呢…

Linux shell编程学习笔记48:touch命令

0 前言 touch是csdn技能树Linux基础练习题中最常见的一条命令,这次我们就来研究它的功能和用法。 1. touch命令的功能、格式和选项说明 我们可以使用命令 touch --help 来查看touch命令的帮助信息。 purpleEndurer bash ~ $ touch --help Usage: touch [OPTION]…

B树:原理、操作及应用

B树:原理、操作及应用 一、引言二、B树概述1. 定义与性质2. B树与磁盘I/O 三、B树的基本操作1. 搜索(B-TREE-SEARCH)2. 插入(B-TREE-INSERT)3. 删除(B-TREE-DELETE) 四、B树的C代码实现示例五、…

selenium 4.x 之验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种: 关闭验证码功能(开发处理)设置万能验证码(开发处理)使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…

与Apollo共创生态:探索自动驾驶的未来蓝图

目录 引言Apollo开放平台Apollo开放平台企业生态计划Apollo X 企业自动驾驶解决方案:加速企业场景应用落地Apollo开放平台携手伙伴共创生态生态共创会员权益 个人心得与展望技术的多元化应用数据驱动的智能化安全与可靠性的重视 结语 引言 就在2024年4月19日&#x…

node应用部署运行案例

生产环境: 系统:linux centos 7.9 node版本:v16.14.0 npm版本:8.3.1 node应用程序结构 [rootRainYun-Q7c3pCXM wiki]# dir assets config.yml data LICENSE node_modules nohup.out output.log package.json server wiki.log [rootRainYun-Q7c…

【跟马少平老师学AI】-【神经网络是怎么实现的】(七-1)词向量

一句话归纳: 1)神经网络不仅可以处理图像,还可以处理文本。 2)神经网络处理文本,先要解决文本的表示(图像的表示用像素RGB)。 3)独热编码词向量: 词表:{我&am…

IOS上线操作

1、拥有苹果开发者账号 2、配置证书,进入苹果开发者官网(https://developer.apple.com/) 3、点击账户(account),然后创建一个唯一的标识符 4、点击"Identifiers",然后点击"&qu…

面试:Mybatis(MyBatis执行流程、延迟加载、MyBatis的缓存)

目录 一、MyBatis执行流程 二、MyBatis是否支持延迟加载? 1、什么是延迟加载? 2、延迟加载的原理 三、MyBatis的缓存 1、一级缓存 2、二级缓存 3、注意事项 一、MyBatis执行流程 读取MyBatis配置文件: mybatis-config.xml加载运行环境和映射文件构…

本地基于知识库的大模型的使用教程

本地基于知识库的大模型的使用教程 启动 双击 大模型启动.bat文件,内容如下: cmd /k "cd /d G:\Anaconda3\Scripts && activate.bat && cd /d D:\docdb_llm && conda activate python3.11 && python startup.py…

2-手工sql注入(进阶篇) sqlilabs靶场1-4题

1. 阅读,学习本章前,可以先去看看基础篇:1-手工sql注入(基础篇)-CSDN博客 2. 本章通过对sqlilabs靶场的实战,关于sqlilabs靶场的搭建:Linux搭建靶场-CSDN博客 3. 本章会使用到sqlmap,关于sqlmap的命令&…

密码学基础练习五道 RSA、elgamal、elgamal数字签名、DSA数字签名、有限域(GF)上的四则运算

1.RSA #include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>#define PRIME_MAX 200 //生成素数范围#define EXPONENT_MAX 200 //生成指数e范围#define Element_Max 127 //加密单元的…

【Vue】结合ElementUI实现简单数据请求和页面跳转功能

一、准备工作 1、创建一个Vue-cli程序 之前的博客有。各位看官姥爷&#xff0c;可以自查。 2、安装ElementUI 在创建Vue-cli程序的过程中&#xff0c;需要在控制台执行以下指令&#xff1a; #安装 element-ui npm i element-ui -S #安装 SASS 加载器 cnpm install sass-loa…