当前位置: 首页 > news >正文

在Ubuntu 18.04下编译OpenJDK 11

在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 CONF=macosx-x86_64-server-slowdebug

不要怀疑源码的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

相关文章:

  • 【每天一个知识点】主题建模(Topic Modeling)
  • NHANES指标推荐:PhenoAge
  • 【时时三省】(C语言基础)循环的嵌套和几种循环的比较
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 使用Unity Cache Server提高效率
  • 在线查看【免费】 dcm、drawio,dcm wps文件格式网站
  • 基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
  • Maven插件管理的基本原理
  • 基于RK3588+FPGA+AI YOLO全国产化的无人船目标检测系统(二)平台设计
  • 创意Python爱心代码分享
  • 牛行为-目标检测数据集(包括VOC格式、YOLO格式)
  • 10、Context:跨维度传音术——React 19 状态共享
  • 【图问答】DeepSeek-VL 论文阅读笔记
  • 【源码】【Java并发】【AQS】从ReentrantLock、Semaphore、CutDownLunch、CyclicBarrier看AQS源码
  • 关于金碟云星空批号问题
  • 开源脚本分享:用matlab处理ltspice生成的.raw双脉冲数据
  • 第1 篇:你好,时间序列!—— 开启时间数据探索之旅
  • 黑苹果win10和macOS双系统
  • 【MCP】从0到1实现一个MCP Server
  • class com.alibaba.fastjson.JSONObject cannot be cast to class
  • 视频·世界读书日|林乾:碎片化阅读或影视综艺≠知识
  • 水利部启动干旱防御Ⅳ级响应,指导广西陕西抗旱保供保灌
  • 比起追逐爆款,动画行业更需要打开思路“重塑肉身”
  • 马上评|与其争论董宇辉该不该获奖,不如多关心文学
  • 海南医科大学继续开展部门正职竞聘上岗,致力营造“谁有本事谁来”
  • 美国海关新规致跨境包裹延误,DHL暂停超800美元对美个人货运