迁移原因
(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仓库
编译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仓库
编译leveldbjni-all-1.8.jar
cd leveldbjni-master/leveldbjni-linux64-aarch64/目录下
修改pom.xml
然后执行编译
mvn clean install -P download -DskipTests
编译成功