NativeLibraryDarwin.java:64 - 无法将 C 库链接到 JNA。原生方法将不可用

Man*_*han 5 macos cassandra java-8 apple-m1

如果您使用的是配备 M1 芯片的最新 MacBook Pro。安装 Cassandra 并启动它可能会引发错误。

步骤1:安装Jdk8 2:安装Cassandra 4.0.1

如何开始:/opt/homebrew/opt/cassandra/bin/cassandra -f

输出:

ERROR [main] 2021-10-08 00:03:12,568 NativeLibraryDarwin.java:64 - Failed to link the C library against JNA. Native methods will be unavailable.
java.lang.UnsatisfiedLinkError: /opt/homebrew/Cellar/cassandra/4.0.1/tmp/jna9964159388012624603.tmp: dlopen(/opt/homebrew/Cellar/cassandra/4.0.1/tmp/jna9964159388012624603.tmp, 1): no suitable image found.  Did find:
    /opt/homebrew/Cellar/cassandra/4.0.1/tmp/jna9964159388012624603.tmp: no matching architecture in universal wrapper
    /opt/homebrew/Cellar/cassandra/4.0.1/tmp/jna9964159388012624603.tmp: no matching architecture in universal wrapper
    at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
    at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
    at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2627)
    at java.base/java.lang.Runtime.load0(Runtime.java:768)
    at java.base/java.lang.System.load(System.java:1837)
    at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018)
    at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988)
    at com.sun.jna.Native.<clinit>(Native.java:195)
    at com.sun.jna.NativeLibrary.<clinit>(NativeLibrary.java:87)
    at org.apache.cassandra.utils.NativeLibraryDarwin.<clinit>(NativeLibraryDarwin.java:55)
    at org.apache.cassandra.utils.NativeLibrary.<clinit>(NativeLibrary.java:98)
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:258)
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:763)
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:887)
INFO  [main] 2021-10-08 00:03:12,596 MonotonicClock.java:199 - Scheduling approximate time conversion task with an interval of 10000 milliseconds
INFO  [main] 2021-10-08 00:03:12,597 MonotonicClock.java:335 - Scheduling approximate time-check task with a precision of 2 milliseconds
WARN  [main] 2021-10-08 00:03:12,597 StartupChecks.java:143 - jemalloc shared library could not be preloaded to speed up memory allocations
WARN  [main] 2021-10-08 00:03:12,597 StartupChecks.java:187 - JMX is not enabled to receive remote connections. Please see cassandra-env.sh for more info.
ERROR [main] 2021-10-08 00:03:12,597 CassandraDaemon.java:909 - The native library could not be initialized properly.
Run Code Online (Sandbox Code Playgroud)

Man*_*han 15

解决方案:

  1. 找到 jna- 在哪里.*.jar 位于。你可以使用 find /opt/homebrew/ -name '*.jar' | grep cassandra
  2. 浏览到https://search.maven.org/artifact/net.java.dev.jna/jna/5.8.0/jar并从页面右上角的下载按钮下载 jar。
  3. 替换你的 jna- . .*.jar 文件与您下载的文件一起。就我而言,我替换了 jna-5.6.0.jar。请记住将文件名保留为以前的文件名。示例我移动了 jna-5.8.0.jar 并重命名为 jna-5.6.0.jar

mv /Users/mansooralikhan/Downloads/jna-5.8.0.jar /opt/homebrew/Cellar/cassandra/4.0.1/libexec/jna-5.6.0.jar

  1. 重新启动卡桑德拉


Aar*_*ron 6

为了回应 Mansoor 的回答,我要补充一点,不幸的是,Apache Cassandra 4.0 附带的 JNA 版本与 M1 架构不兼容。

要解决此问题,请前往 JNA GitHub 存储库的“下载”部分,您应该在其中找到最新版本的 JNA jar 文件。

https://github.com/java-native-access/jna#jna

下载 JNA 5.8 或更高版本,并替换jna-5.6.0.jarCassandralib/目录中的现有文件(基于 tarball 的安装)。