微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gRPC + SSL +超级jar + Linux =无法加载netty-tcnative

在gRPC + SSL = UnsatisfiedLinkError上感谢@nmittler我已经在我的Windows PC和目标Linux平台上运行gRPC + SSL。

但是只有当我为io.netty/netty-tcnative-boringssl-static/1.1.33.Fork17依赖项指定一个<classifier>的io.netty/netty-tcnative-boringssl-static/1.1.33.Fork17 。 这可以是:

硬编码(如到windows-x86_64 )

使用os-maven-plugin和${os.detected.classifier}注入

但是这意味着我只能运行在:

Windows(或者我硬编码的平台)

我用来编译的平台

但是我真正希望能够做的是在Windows上编译,但是在Linux上运行。 所以, 从理论上讲 ,我可以放弃<classifier>来引入超级jar文件(正如文档中指定的那样)。

我如何使用Nginx 1.9.5作为gRPC的反向代理?

Windows上的gRPC C ++

但是,这是行不通的:当我通过io.netty.util.internal.NativeLibraryLoader.load()步骤时,我发现一个调用System.mapLibraryName() 。

在Windows上这正确返回netty-tcnative.dll 。

但在Linux(RHEL 7)上,它返回libnetty-tcnative.so …它不在uber-jar( jar tf netty-tcnative-boringssl-static-1.1.33.Fork17.jar返回,其中包括meta-inf/native/libnetty-tcnative-linux-x86_64.so )。

看看jar的分类 linux版本,我可以看到它包含meta-inf/native/libnetty-tcnative.so …这意味着要么build立不同的uber jar需要重新命名libnetty-tcnative-linux-x86_64.so要libnetty-tcnative.so )或NativeLibraryLoader某处需要考虑不同的命名…

我在正确的轨道上? 有人可以解决这个问题吗?

你是对的,Maven Central上的超级jar包不包含共享库。 目前还不清楚这个问题是建立还是部署这个罐子。 我已经提出了https://github.com/netty/netty-tcnative/issues/145跟踪修复&#x3002;

升级到io.grpc/grpc-all/0.14.0 (从0.13.2 )解决了我的问题,因为它带来了io.netty/netty-handler的新版本( 4.1.0.CR7与4.1.0.CR3 )。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐