问题描述
我可以使用以下命令 java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
启动实例,但是当我尝试执行其他任何操作时,它会出现以下错误。
2021 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal log 警告:[sqlite] 无法打开数据库 [15]:com.almworks.sqlite4java.sqliteException:[-91] 无法加载库:java.lang.UnsatisfiedLinkError:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib : dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib,1): 没有找到合适的图像。有没有发现: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 2021 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal log 严重:[sqlite] sqliteQueue[shared-local-instance.db]:运行作业队列时出错 com.almworks.sqlite4java.sqliteException: [-91] 无法加载库: java.lang.UnsatisfiedLinkError: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/Users/ahsanejaz/Downloads/Downloads/dynamodb_local_latest/ DynamoDBLocal_lib/libsqlite4java-osx.dylib,1): 没有找到合适的图像。有没有发现: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 在 com.almworks.sqlite4java.sqlite.loadLibrary(sqlite.java:97) 在 com.almworks.sqlite4java.sqliteConnection.open0(sqliteConnection.java:1441) 在 com.almworks.sqlite4java.sqliteConnection.open(sqliteConnection.java:282) 在 com.almworks.sqlite4java.sqliteConnection.open(sqliteConnection.java:293) 在 com.almworks.sqlite4java.sqliteQueue.openConnection(sqliteQueue.java:464) 在 com.almworks.sqlite4java.sqliteQueue.queueFunction(sqliteQueue.java:641) 在 com.almworks.sqlite4java.sqliteQueue.runQueue(sqliteQueue.java:623) 在 com.almworks.sqlite4java.sqliteQueue.access$000(sqliteQueue.java:77) 在 com.almworks.sqlite4java.sqliteQueue$1.run(sqliteQueue.java:205) 在 java.base/java.lang.Thread.run(未知来源) 引起:java.lang.UnsatisfiedLinkError:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libos)找到图像。有没有发现: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 在 java.base/java.lang.classLoader$NativeLibrary.load0(Native Method) 在 java.base/java.lang.classLoader$NativeLibrary.load(来源不明) 在 java.base/java.lang.classLoader$NativeLibrary.loadLibrary(来源不明) 在 java.base/java.lang.classLoader.loadLibrary0(来源不明) 在 java.base/java.lang.classLoader.loadLibrary(来源不明) 在 java.base/java.lang.Runtime.load0(来源不明) 在 java.base/java.lang.System.load(来源不明) 在 com.almworks.sqlite4java.Internal.tryLoadFromPath(Internal.java:340) 在 com.almworks.sqlite4java.Internal.loadLibraryX(Internal.java:117) 在 com.almworks.sqlite4java.sqlite.loadLibrary(sqlite.java:95) ... 9 更多 2021 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal log 警告:[sqlite] sqliteQueue[shared-local-instance.db]:异常停止,转世 3000 毫秒内
这个问题是否与新的 M1 Apple Silicon 架构有关?有什么解决方法吗?
解决方法
我在通过 brew 安装 dynamodb-local 时遇到了同样的问题。显然,正在使用的 sqlite4java 库中没有 arm 版本。例如我得到:
Caused by: java.lang.UnsatisfiedLinkError: /opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib,1): no suitable image found. Did find:
/opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: no matching architecture in universal wrapper
有趣的是,使用 docker preview version 的 docker 镜像对我来说工作正常,例如通过使用来自 Deploying DynamoDB Locally on Your Computer 的 docker compose 文件(在 Docker 选项卡上)。
,我能够运行 DynamoDB,安装 Java 版本 x86-64 架构而不是 arm64 并从 rosetta 终端启动
java --version
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)
OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9,mixed mode,sharing)