【发布时间】:2016-05-23 16:00:30
【问题描述】:
感谢@nmittler 在gRPC + SSL = UnsatisfiedLinkError 上的 gRPC + SSL 在我的 Windows PC 和目标 Linux 平台上工作。
但仅当我为 io.netty/netty-tcnative-boringssl-static/1.1.33.Fork17 依赖项指定 <classifier> 时。可以是:
- 硬编码(例如到
windows-x86_64) - 使用os-maven-plugin 和
${os.detected.classifier}注入
但这意味着我只能在:
- Windows(或我硬编码的任何平台)
- 我用来编译的平台
但我真正希望能够在 Windows 上编译但在 Linux 上运行。所以,理论上,我可以不使用 <classifier> 来引入 uber-jar(在 the docs 中指定)。
但这不起作用:当我单步执行 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 ... 这意味着需要以不同方式构建 uber jar(将 libnetty-tcnative-linux-x86_64.so 重命名为 @987654337 @) 或NativeLibraryLoader 某处需要考虑不同的命名...
我在正确的轨道上吗?有人可以帮忙解决这个问题吗?
【问题讨论】: