Published on

arm64架构上使用fabric-java-sdk 找不到netty-tcnative库的错误

Authors

环境

OS: 银河麒麟v10 CPU: 鲲鹏920 ARCH: aarch64

需要这个库文件,libnetty_tcnative_linux_aarch_64.so编译或者下载得到 libnetty_tcnative_linux_aarch_64.so这个又依赖libapr-1.so.0这个库

  • libapr-1.so.0 这个可以直接yum 安装
yum install apr-util

最终解决方案

下面的安装编译都走不通 我发现我的项目里依赖的库里面有个这个 netty-tcnative-boringssl-static-2.0.34.Final.jar 默认依赖的版本很低,如下图,低版本是没有这个库的。

在pom.xml里面指定版本

    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-tcnative-boringssl-static</artifactId>
      <version>2.0.34.Final</version>
    </dependency>

这里还有个坑,上面那个图框选的库的名字是我改过的。java程序默认查找名字是 libnetty_tcnative_linux_aarch64.so,是找不到的。

  • 更改jar包里面文件名 进入maven库的目录
respository\io\netty\netty-tcnative-boringssl-static\2.0.34.Final
执行
jar -vxf netty-tcnative-boringssl-static-2.0.34.Final.jar
改完之后,打包
jar -cvf netty-tcnative-boringssl-static-2.0.34.Final.jar io/ MEATA-INF/

然后maven 重新打包项目。 搞定! java -jar app.jar 运行成功!! 搞了我两天,坑啊。

安装

https://github.com/netty/netty-tcnative/issues/552 参考这个链接 可以在 https://repo1.maven.org/maven2/io/netty/netty-tcnative/2.0.34.Final/ maven库里找到 netty-tcnative-2.0.34.Final-linux-aarch64-fedora.jar 的包。 以zip方式打开,在META-INF\native\ 里面有libnetty_tcnative_linux_aarch64.so文件。

  • 注意 这里得到的so跟java报错的名字不一样。后面的是_aarch64.so,需要的是aarch_64.so,重命名一下

将libnetty_tcnative_linux_aarch_64.so这个放入动态库的查找路径,/lib /lib64 /usr/lib /usr/lib64 其中之一都可以。以防万一,再设置下环境变量

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

再运行java -jar xx.jar 可以通过了。但不知为啥,会出现段错误,jvm直接挂了。可能跟这个库是fedora专用的有关。

编译

我下载了源码,没编译成功。改天补 参考 https://bbs.huaweicloud.com/forum/thread-73193-1-1.html https://we8log.com/mental/post/345/ 编译死活找不到一个东西 报native-src错误