ErrorsStaticallyReferencedJniMethods:java.lang.UnsatisfiedLinkError

问题描述 投票:0回答:1

我正在运行基于 netty 的组件,并在尝试绑定绑定端口时看到 UnsatisfiedLinkError 错误。有人可以澄清一下,这个特定错误的根本原因是什么? 我读到了有关潜在兼容性问题的信息。为了确保我没有任何版本冲突,我尝试了 netty bom、reactor bom、spring boot bom - 似乎没有解决问题。我也尝试过不同版本的netty、reactor、spring boot。

pom.xml(带有反应器 bom):

<dependency>
    <groupId>io.projectreactor.netty</groupId>
    <artifactId>reactor-netty-core</artifactId>
</dependency>

<dependency>
    <groupId>io.projectreactor.netty</groupId>
    <artifactId>reactor-netty-http</artifactId>
</dependency>


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-bom</artifactId>
            <version>2022.0.21</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

类路径中的 netty jar:

netty-buffer-4.1.105.Final.jar
netty-codec-4.1.105.Final.jar
netty-codec-dns-4.1.105.Final.jar
netty-codec-http2-4.1.105.Final.jar
netty-codec-http-4.1.105.Final.jar
netty-codec-socks-4.1.105.Final.jar
netty-common-4.1.105.Final.jar
netty-handler-4.1.105.Final.jar
netty-handler-proxy-4.1.105.Final.jar
netty-resolver-4.1.105.Final.jar
netty-resolver-dns-4.1.105.Final.jar
netty-resolver-dns-classes-macos-4.1.105.Final.jar
netty-resolver-dns-native-macos-4.1.105.Final-osx-x86_64.jar
netty-transport-4.1.105.Final.jar
netty-transport-classes-epoll-4.1.105.Final.jar
netty-transport-native-epoll-4.1.105.Final-linux-x86_64.jar
netty-transport-native-unix-common-4.1.105.Final.jar
reactor-netty-core-1.1.15.jar
reactor-netty-http-1.1.15.jar

堆栈跟踪:

java.lang.UnsatisfiedLinkError: 'int io.netty.channel.unix.ErrorsStaticallyReferencedJniMethods.errorEHOSTUNREACH()'
    at io.netty.channel.unix.ErrorsStaticallyReferencedJniMethods.errorEHOSTUNREACH(Native Method) ~[netty-transport-native-unix-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.unix.Errors.<clinit>(Errors.java:62) ~[netty-transport-native-unix-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.unix.Socket.bind(Socket.java:378) ~[netty-transport-native-unix-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.epoll.AbstractEpollChannel.doBind(AbstractEpollChannel.java:730) ~[netty-transport-classes-epoll-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.epoll.EpollServerSocketChannel.doBind(EpollServerSocketChannel.java:76) ~[netty-transport-classes-epoll-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1334) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:600) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:579) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:973) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:260) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380) ~[netty-transport-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:413) ~[netty-transport-classes-epoll-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.105.Final.jar!/:4.1.105.Final]
    at java.lang.Thread.run(Thread.java:1583) ~[?:?]

Netty 能够加载所需的库:

D 241016 032344.803 [ServerRunner] NativeLibraryLoader {} - -Dio.netty.native.workdir: /tmp (io.netty.tmpdir)
D 241016 032344.804 [ServerRunner] NativeLibraryLoader {} - -Dio.netty.native.deleteLibAfterLoading: true
D 241016 032344.804 [ServerRunner] NativeLibraryLoader {} - -Dio.netty.native.tryPatchShadedId: true
D 241016 032344.804 [ServerRunner] NativeLibraryLoader {} - -Dio.netty.native.detectNativeLibraryDuplicates: true
D 241016 032344.815 [ServerRunner] NativeLibraryLoader {} - Successfully loaded the library netty_transport_native_epoll_x86_64
java spring-boot reactor-netty
1个回答
0
投票

我已确定该问题是特定于环境的。我可以在一台 Linux 主机上重现它,但它在另一台 Linux 主机上运行没有任何问题。 因此,在我可以观察到该问题的主机上,由于某种原因,netty 无法调用以下本机方法:

io.netty.channel.unix.ErrorsStaticallyReferencedJniMethods.errorENETUNREACH
。 其他方法都可以,但这个方法不行。

uname -a

Linux <host-name> 6.5.0-1020-aws #20~22.04.1-Ubuntu SMP Wed May  1 16:10:50 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

cat /etc/os-release

PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

ldd——版本

ldd (Ubuntu GLIBC 2.35-0ubuntu3.8) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
© www.soinside.com 2019 - 2024. All rights reserved.