在Ubuntu 18.04下编译OpenJDK 11

news2025/4/24 4:12:13

在Ubuntu 18.04下编译OpenJDK 11

源码下载地址:

链接: https://pan.baidu.com/s/1QAdu-B6n9KqeBakGlpBS3Q 密码: 8lho

Linux下的环境要求

不同版本的jdk会要求在不同版本的Ubuntu下编译,不要用太高版本的Ubuntu或者gcc,特别是gcc,这个跟glibc的版本还绑定,如果gcc版本太高,则glibc版本也高,也会影响openjdk的编译。

gcc7,freetype2

可以直接使用apt-get install安装

编译OpenJDK11

先configure,再make

configure可以参考openjdk/doc/building.html

安装必要的库

sudo apt-get install build-essential

由于jdk的编译需要一个boot-jdk,即自举用的jdk。因此,需提前安装一个openjdk11。

sudo apt install openjdk-11-jdk -y

安装完毕之后查看version

jx@ubuntu:~$ which java
/usr/bin/java
jx@ubuntu:~$ java --version
openjdk 11.0.19 2023-04-18
OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)

此时发现默认安装的jdk是11.0.19。由于自举jdk只能是N或者N-1版本,因此,我们选择一个比当前安装jdk稍微大一点的版本进行编译以保证成功。

git checkout -b jdk-11+19 jdk-11+19

我的configure按照以下命令

bash configure --with-debug-level=slowdebug --disable-warnings-as-errors

如果不能产生调试信息

bash configure --with-native-debug-symbols=internal --with-debug-level=slowdebug --with-jvm-variants=server --with-jvm-features=minimal --disable-warnings-as-errors

make

make images

不要怀疑源码的Makefile有问题,当报错时,可能是gcc版本太高了,建议使用7或8。

交叉编译AArch64

  1. 首先在x86上安装openjdk11

  2. 安装必要的工具和依赖项

sudo apt-get install autoconf libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libasound2-dev libfontconfig1-dev
  1. 安装gcc
sudo apt install gcc-7 g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7
  1. 安装aarch64的交叉工具链
sudo apt install gcc-7-aarch64-linux-gnu g++-7-aarch64-linux-gnu
  1. 安装x11
sudo apt install x11proto-core-dev  x11proto-input-dev x11proto-kb-dev x11proto-render-dev x11proto-xext-dev libxi-dev

然而,这样安装并不能把x11放在交叉工具链的目录中,需要进行如下操作

cd /usr/aarch64-linux-gnu
sudo ln -sf /usr/include/X11 ./X11
sudo cp /usr/lib/x86_64-linux-gnu/libX11.so* /usr/aarch64-linux-gnu/lib/
sudo cp /usr/lib/x86_64-linux-gnu/libXext.so* /usr/aarch64-linux-gnu/lib/
sudo cp /usr/lib/x86_64-linux-gnu/libXrender.so* /usr/aarch64-linux-gnu/lib/
sudo cp /usr/lib/x86_64-linux-gnu/libXtst.so* /usr/aarch64-linux-gnu/lib/
sudo cp /usr/lib/x86_64-linux-gnu/libXt.so* /usr/aarch64-linux-gnu/lib/

然而,上述的方法安装的是x86_64架构下的libX,此时需要将获得libX11aarch64版本:

  • 方法1:

[如何交叉编译X11](ubuntu使用arrch64 arm进行交叉编译 X11_x11extra 交叉编译-CSDN博客)

  • 方法2:(我采用的是这个方法)

拷贝一台aarch64机器上的libX库到/usr/aarch64-linux-gnu/lib/里。

其中,ARM机器的库位置在/usr/lib/aarch64-linux-gnu

注意,拷贝这些.so文件不包括libX11.so,这个文件是一个软连接文件。如果报错误表示libX11.so不兼容,则建立与libX11.so.6.3.0的软链接。其他类似的文件也是如此。如果不知道软链接的具体关联位置,请查找x86机器中/usr/lib/x86_64-linux-gnu里面的关系。

ln -sf /usr/aarch64-linux-gnu/lib/libX11.so.6.3.0 /usr/aarch64-linux-gnu/lib/libX11.so 
  1. 安装freetype

如果上述网址无法下载,则通过浏览器的搜索找到对应的deb包,下载后通过dpkg进行安装。安装时提示已经存在x86的版本,此时采用如下方式

sudo dpkg -i --instdir=/home/jx/libs/freetype  libfreetype6_2.10.4+dfsg-1+deb11u1_arm64.deb

其中/home/jx/libs/freetype为自定义目录,安装完成后,其.so文件会在/home/jx/libs/freetype/usr/lib/aarch64-linux-gnu中。将其中的.so文件拷贝到/usr/aarch64-linux-gnu/lib中。

若提示

ld: cannot find -lfreetype 

则还是软链接的问题,新建一个libfreetype.so的软链接,链接到libfreetype.so.6.17.4

  1. 安装libasound

提示

ld: cannot find -lasound

表示没有aarch64架构下的libasound库,其操作如上述库的安装。注意最后使用libasound.so的软链接。

然后在openjdk源码目录下创建一个config.sh文件

#!/bin/bash
bash ./configure \
  --openjdk-target=aarch64-linux-gnu \
  --with-tools-dir=/usr/bin \
  --with-debug-level=release \
  --disable-warnings-as-errors \
  --x-includes=/usr/aarch64-linux-gnu/include \
  --x-libraries=/usr/aarch64-linux-gnu/lib \
  CC=aarch64-linux-gnu-gcc-7 \
  CXX=aarch64-linux-gnu-g++-7

运行

bash config.sh

执行

make CONF=linux-aarch64-normal-server-release images

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

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

相关文章

K8s:概念、特点、核心组件与简单应用

一、引言 在当今云计算和容器技术蓬勃发展的时代,Kubernetes(简称 K8s)已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案,极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…

STM32的定时器输出PWM时,死区时间(DTR)如何计算

在 STM32F429(以及所有 STM32F4 “高级定时器”)中,死区时间由 TIMx_BDTR 寄存器的 8 位 “Dead‑Time Generator” 字段 DTG[7:0] 来配置。其计算分三步: 计算死区时钟周期 tDTS TIM1 时钟源为 APB2 定时器时钟(PCL…

STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统

STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统 NorFlash简介NorFlash操作驱动代码文件系统测试代码 NorFlash简介 NOR Flash是一种类型的非易失性存储器,它允许在不移除电源的情况下保留数据。NOR Flash的名字来源于其内部结构中使用的NOR逻辑门。…

ClickHouse 设计与细节

1. 引言 ClickHouse 是一款备受欢迎的开源列式在线分析处理 (OLAP) 数据库管理系统,专为在海量数据集上实现高性能实时分析而设计,并具备极高的数据摄取速率 1。其在各种行业中得到了广泛应用,包括众多知名企业,例如超过半数的财…

智能体MCP 实现数据可视化分析

参考: 在线体验 https://www.doubao.com/chat/ 下载安装离线体验 WPS软件上的表格分析 云上创建 阿里mcp:https://developer.aliyun.com/article/1661198 (搜索加可视化) 案例 用cline 或者cherry studio实现 mcp server:excel-mcp-server、quickchart-mcp-server

再看开源多模态RAG的视觉文档(OCR-Free)检索增强生成方案-VDocRAG

前期几个工作提到,基于OCR的文档解析RAG的方式进行知识库问答,受限文档结构复杂多样,各个环节的解析泛化能力较差,无法完美的对文档进行解析。因此出现了一些基于多模态大模型的RAG方案。如下: 【RAG&多模态】多模…

深入浅出 NVIDIA CUDA 架构与并行计算技术

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、CUDA为何重要:并行计算的时代 2、NVIDIA在…

FPGA系列之DDS信号发生器设计(DE2-115开发板)

一、IP核 IP(Intellectual Property)原指知识产权、著作权等,在IC设计领域通常被理解为实现某种功能的设计。IP模块则是完成某种比较复杂算法或功能(如FIR滤波器、FFT、SDRAM控制器、PCIe接口、CPU核等)并且参数可修改的电路模块&#xff0c…

【Dv3Admin】从零搭建Git项目安装·配置·初始化

项目采用 Django 与 Vue3 技术栈构建,具备强大的后端扩展能力与现代前端交互体验。完整实现了权限管理、任务队列、WebSocket 通信、系统配置等功能,适用于构建中后台管理系统与多租户平台。 本文章内容涵盖环境搭建、虚拟环境配置、前后端部署、项目结…

P3416-图论-法1.BFS / 法2.Floyd

这道题虽然标签有floyd但是直接bfs也能过 其实事实证明还是bfs快,因为bfs只需要遍历特定的点,但是floyd需要考虑遍历所有可能的中介点 法1.BFS 用字典存储每个点所能普及的范围,然后用对每个点bfs进行拓展 nint(input())temp[]#xmax0;yma…

极狐GitLab 议题和史诗创建的速率限制如何设置?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 议题和史诗创建的速率限制 (BASIC SELF) 速率限制是为了控制新史诗和议题的创建速度。例如,如果您将限制设置为 …

提交到Gitee仓库

文章目录 注册配置公钥创建空白的码云仓库把本地项目上传到码云对应的空白仓库中 注册 注册并激活码云账号( 注册页面地址:https://gitee.com/signup ) 可以在自己C盘/用户/用户名/.ssh 可以看到 有id_rsa.pub 以前在GitHub注册时搞过&…

oracle中错误总结

oracle中给表起别名不能用as,用as报错 在 Oracle 数据库中,​​WITH 子句(即 CTE,公共表表达式)允许后续定义的子查询引用前面已经定义的 CTE​​,但 ​​前面的 CTE 无法引用后面的 CTE​​。这种设计类似…

纽约大学具身智能体在城市空间中的视觉导航之旅!CityWalker:从海量网络视频中学习城市导航

作者:Xinhao Liu, Jintong Li, Yicheng Jiang, Niranjan Sujay, Zhicheng Yang, Juexiao Zhang, John Abanes, Jing Zhang, Chen Feng单位:纽约大学论文标题:CityWalker: Learning Embodied Urban Navigation from Web-Scale Videos论文链接&…

OpenCV颜色变换cvtColor

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 颜色变换是imgproc模块中一个常用的功能。我们生活中看到的大多数彩色图片都是RGB类型的,但是在进行图像处理时需要用到灰度图、二值图、HSV(六角锥体模型,这个模型中颜色的…

Manus技术架构、实现内幕及分布式智能体项目实战

Manus技术架构、实现内幕及分布式智能体项目实战 模块一: 剖析Manus分布式多智能体全生命周期、九大核心模块及MCP协议,构建低幻觉、高效且具备动态失败处理能力的Manus系统。 模块二: 解析Manus大模型Agent操作电脑的原理与关键API&#xf…

下载油管视频 - yt-dlp

文章目录 1. yt-dlp与you-get介绍1.1 主要功能对比1.2 使用场景1.3 安装 2. 基本命令介绍2.1 默认下载视频2.2 指定画质和格式规则2.3 下载播放列表2.4 备注 3. 参考资料 之前只使用you-get下载b站视频,当时了解you-get也可下载油管视频,但之前无此需求&…

济南通过首个备案生活服务大模型,打造行业新标杆

近日,一则振奋人心的消息在人工智能领域传开:济南本土企业丽阳神州智能科技有限公司自主研发的 “丽阳雨露” 大模型成功通过国家网信办的备案。这一成果不仅是济南企业在科技创新道路上的重大突破,更标志着我国在生活服务领域的人工智能应用…

第6次课 贪心算法 A

向日葵朝着太阳转动,时刻追求自身成长的最大可能。 贪心策略在一轮轮的简单选择中,逐步导向最佳答案。 课堂学习 引入 贪心算法(英语:greedy algorithm),是用计算机来模拟一个「贪心」的人做出决策的过程…

Hexo+Github+gitee图床零成本搭建自己的专属博客

一个详细、完善的 Hexo 博客部署教程,不仅涵盖了基本的安装、配置、生成与部署步骤,还增加了常见问题的解决、主题设置、图片上传等 在开始之前可以看看我最终搭建出来的成果:https://liangjh.blog 1.安装git和nodejs 在Windows上使用Git&a…