【问题标题】:java.lang.UnsatisfiedLinkError when starting the play project启动播放项目时出现java.lang.UnsatisfiedLinkError
【发布时间】:2022-02-25 12:58:33
【问题描述】:

我试图在 M1 上的 IntelliJ IDEA Ultimate MacBook Pro 中启动一个正在播放的项目,我在控制台中收到以下错误:

[错误] java.lang.UnsatisfiedLinkError: /用户/用户名/库/缓存/JNA/temp/jna2878211531869408345.tmp: dlopen(/用户/用户名/库/缓存/JNA/temp/jna2878211531869408345.tmp, 0x0001): 试过: '/用户/用户名/库/缓存/JNA/temp/jna2878211531869408345.tmp' (胖文件,但缺少兼容的架构(有'i386,x86_64', 需要'arm64e')),'/usr/lib/jna2878211531869408345.tmp'(没有这样的文件)

我在删除所有JDK后尝试在arm架构上重新安装JDK,但没有帮助

需要什么技巧来解决这个问题?

完整堆栈跟踪:

[error] java.lang.UnsatisfiedLinkError: /Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp: dlopen(/Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp, 0x0001): tried: '/Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e')), '/usr/lib/jna2878211531869408345.tmp' (no such file)
    [error]     at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    [error]     at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
    [error]     at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
    [error]     at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
    [error]     at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2627)
    [error]     at java.base/java.lang.Runtime.load0(Runtime.java:768)
    [error]     at java.base/java.lang.System.load(System.java:1837)
    [error]     at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018)
    [error]     at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988)
    [error]     at com.sun.jna.Native.<clinit>(Native.java:195)
    [error]     at io.methvin.watchservice.jna.CarbonAPI.<clinit>(CarbonAPI.java:19)
    [error]     at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23)
    [error]     at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:101)
    [error]     at io.methvin.watchservice.WatchablePath.register(WatchablePath.java:50)
    [error]     at io.methvin.watcher.DirectoryWatcher.register(DirectoryWatcher.java:352)
    [error]     at io.methvin.watcher.DirectoryWatcher.registerAll(DirectoryWatcher.java:317)
    [error]     at io.methvin.watcher.DirectoryWatcher.<init>(DirectoryWatcher.java:167)
    [error]     at io.methvin.watcher.DirectoryWatcher$Builder.build(DirectoryWatcher.java:118)
    [error]     at play.dev.filewatch.DefaultFileWatchService.watch(DefaultFileWatchService.scala:38)
    [error]     at play.dev.filewatch.FileWatchService$$anon$1.watch(FileWatchService.scala:87)
    [error]     at play.runsupport.Reloader.<init>(Reloader.scala:414)
    [error]     at play.runsupport.Reloader$.reloader$lzycompute$1(Reloader.scala:259)
    [error]     at play.runsupport.Reloader$.play$runsupport$Reloader$$reloader$1(Reloader.scala:251)
    [error]     at play.runsupport.Reloader$.startDevMode(Reloader.scala:271)
    [error]     at play.sbt.run.PlayRun$.devModeServer$lzycompute$1(PlayRun.scala:99)
    [error]     at play.sbt.run.PlayRun$.devModeServer$1(PlayRun.scala:83)
    [error]     at play.sbt.run.PlayRun$.$anonfun$playRunTask$3(PlayRun.scala:106)
    [error]     at play.sbt.run.PlayRun$.$anonfun$playRunTask$3$adapted(PlayRun.scala:68)
    [error]     at scala.Function1.$anonfun$compose$1(Function1.scala:49)
    [error] stack trace is suppressed; run 'last Compile / run' for the full output
    [error] (Compile / run) java.lang.UnsatisfiedLinkError: /Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp: dlopen(/Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp, 0x0001): tried: '/Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e')), '/usr/lib/jna2878211531869408345.tmp' (no such file)

【问题讨论】:

  • 确保您使用的是为M1 构建的JDK。然后在项目设置中设置 Idea 使用正确的 JDK
  • @IvanStanislavciuc,为您需要的架构组装 JDK,检查了很多次
  • 检查 jdk 的架构。运行jshell,然后运行System.getProperty("os.arch")。应该说aarch64
  • @IvanStanislavciuc jshell> System.getProperty("os.arch") $1 ==> "aarch64"

标签: java scala playframework apple-m1 unsatisfiedlinkerror


【解决方案1】:

找到了解决办法: 在 sbt 1.4.6 中有一个 JNA 库版本 5.5.0,它显然没有 arm64 架构处理器所需的文件 将 sbt 版本提升到 1.6.2 有帮助

【讨论】: