倚天生态迁移-leveldbjni-all-1.8.jar适配倚天指导

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: leveldbjni-all-1.8.jar带有jni so,其是和架构相关的,当遇到该jar包在倚天上报错不兼容时,可通过此指导书迁移,编译一个全架构通用的jar包

迁移原因

(1)官方Maven仓库的jar包没有包含aarch64版本的so

https://mvnrepository.com/artifact/org.fusesource.leveldbjni/leveldbjni-all/1.8

(2)openlabtestting有aarch64兼容的版本so, 但是依赖的glibc版本过高,需要glibc 3.4.21

https://mvnrepository.com/artifact/org.openlabtesting.leveldbjni/leveldbjni-all/1.8

(3)鲲鹏镜像仓存在aarch64兼容版本,也支持低版本glibc,但是不同时兼容x86平台

https://mirrors.huaweicloud.com/kunpeng/maven/org/fusesource/leveldbjni/leveldbjni-all/1.8/

迁移方法

主要参考了迁移指导,部分步骤上略有不同

https://bbs.huaweicloud.com/forum/thread-22684-1-1.html

项目

版本

OS

Centos 7.9

maven

3.9.1

操作系统默认安装版本过低,需要升级

gcc

4.8.5

安装编译依赖

yum install git

yum install gcc-c++

yum install cmake

yum install automake

yum install libtool*

yum install automake

编译snappy

下载代码https://codeload.github.com/google/snappy/tar.gz/refs/tags/1.1.5

解压代码后执行如下步骤编译

./autogen.sh
./configure --disable-shared --with-pic
make

编译完成后拷贝当前目录.libs/libsnappy.a到snappy目录下
cp .libs/libsnappy.a .

export SNAPPY_HOME=`pwd`

编译leveldb

需要下载如下leveldb代码编译,因为开源官方的leveldb需要修改代码或者打一些patch才能匹配leveldbjni的接口,如下代码已经做了适配和修改。

下载代码https://codeload.github.com/Xingwd/leveldb/zip/refs/heads/my-leveldb-1.19

解压代码后执行如下步骤编译

#获取https://github.com/fusesource/leveldbjni master分支下的leveldb.patch
#在leveldb目录下执行
patch -p1 < leveldb.patch
make
#拷贝编译好的leveldb.a到代码根目录
cp out-static/libleveldb.a .
export LEVELDB_HOME=`pwd`

编译leveldbjni-99-master-SNAPSHOT.jar

下载leveldbjni master分支,master分支已支持aarch64

https://github.com/fusesource/leveldbjni.git

leveldbjni-master目录下执行

export LEVELDBJNI_HOME=`pwd`
cd leveldbjni
mvn clean install -P download -DskipTests

编译并安装leveldbjni-99-master-SNAPSHOT.jar到本地maven仓库

image.png

编译leveldbjni-linux64-aarch64-99-master-SNAPSHOT.jar

cd leveldbjni-master/leveldbjni-linux64-aarch64/目录下执行

mvn clean install -P download -DskipTests

编译安装leveldbjni-linux64-aarch64-99-master-SNAPSHOT.jar到本地maven仓库

image.png

编译leveldbjni-all-1.8.jar

cd leveldbjni-master/leveldbjni-linux64-aarch64/目录下

修改pom.xml

image.png

image.png

然后执行编译

mvn clean install -P download -DskipTests

image.png

编译成功

相关文章
倚天生态迁移-Java业务jar包迁移倚天适配实践总结
有些jar包有jni调用,其调用的so是和处理器架构强相关的,不同处理器架构需要使用不同的so,若jar包没有包含arm64/aarch64处理器架构的so,则在倚天上使用该jar包需要进一步适配增加aarch64的支持。
|
2月前
|
druid Java Maven
杨校老师课堂之java_关于如何下载jar包的教程
杨校老师课堂之java_关于如何下载jar包的教程
89 0
|
22天前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
147 2
[JarEditor]可直接修改jar包的IDEA插件
|
20天前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
24天前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
1月前
|
监控 Ubuntu Java
如何在Ubuntu上运行Jar包?
【7月更文挑战第9天】
61 0
如何在Ubuntu上运行Jar包?
|
21天前
|
Java 应用服务中间件
tomcat7 与 tomcat8 加载 jar包的顺序
tomcat7 与 tomcat8 加载 jar包的顺序
16 0
|
21天前
|
Java 应用服务中间件 API
java 启动查看jar包加载顺序并设置classpath
java 启动查看jar包加载顺序并设置classpath
37 0
|
2月前
|
Java Maven 容器
springBoot项目导入外部jar包
springBoot项目导入外部jar包
24 4