当前位置: 首页 > 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 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.mrgr.cn/news/99289.html

相关文章:

  • Emacs入门篇2:安装evil插件以便vi老用户可以使用VI快捷键来快速使用Emacs
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
  • Java虚拟机之GC收集器对比解读
  • Linux学习之守护进程1
  • 【springsecurity oauth2授权中心】简单案例跑通流程 P1
  • 音视频小白系统入门课-2
  • NestJS-Knife4j
  • 9.策略模式:思考与解读
  • HTTP/1.1 队头堵塞
  • [架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析
  • PostgreSQL 用户资源管理
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(8): - (1)复习一些语法(2)「~ています」
  • Linux系统-cat命令/more命令/less命令
  • 软件工程师中级考试-上午知识点总结(上)
  • LTspice测量SiC MOSFET的C-V特性
  • Linux Wlan-四次握手(eapol)框架流程
  • 本地搭建一个简易版本的 Web3 服务
  • 可穿戴设备待机功耗需降至μA级但需保持实时响应(2万字长文深度解析)
  • python测试框架之pytest
  • Cypress EZ-USB CX3 适配输出imx586相机