运行SBT Scala项目时遇UnsatisfiedLinkError架构不兼容问题
JNA架构不兼容导致UnsatisfiedLinkError(M1 Mac环境)
错误日志
java.lang.UnsatisfiedLinkError: dlopen(/Users/user/Library/Caches/JNA/temp/jna11185077732330192528.tmp, 0x0009): tried: '/Users/user/Library/Caches/JNA/temp/jna11185077732330192528.tmp' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/user/Library/Caches/JNA/temp/jna11185077732330192528.tmp' (no such file), '/Users/user/Library/Caches/JNA/temp/jna11185077732330192528.tmp' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))
环境信息
- SBT版本:1.7.2
- Scala版本:2.13.8
- Java版本:11.0.18
- 操作系统:M1芯片Mac OS 13.3.1
解决步骤
1. 确认JDK架构适配M1
执行终端命令检查当前Java架构:
java -version
输出中需包含aarch64或arm64,否则需替换为ARM64版本的JDK 11(如Azul Zulu、Adoptium提供的ARM64安装包)。
2. 清理JNA缓存文件
删除JNA生成的x86_64架构临时文件:
rm -rf ~/Library/Caches/JNA/
重新运行项目后,JNA会自动生成适配ARM64的文件。
3. 强制SBT以ARM64模式启动
若SBT默认通过Rosetta以x86_64运行,启动时指定ARM64架构和对应JDK路径:
JAVA_HOME=/your/arm64/jdk/path arch -arm64 sbt run
替换/your/arm64/jdk/path为实际JDK安装路径(如/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home)。
4. 更新项目JNA依赖版本
若项目直接依赖JNA,升级到支持ARM64的版本(5.13.0及以上),在build.sbt中修改:
libraryDependencies += "net.java.dev.jna" % "jna" % "5.13.0"
内容的提问来源于stack exchange,提问作者laban_luka
相关产品推荐
相关产品推荐

