【问题标题】:UnsatisfiedLinkError for DuckDb native code in JavaJava 中 DuckDb 本机代码的 UnsatisfiedLinkError
【发布时间】:2021-06-09 21:39:47
【问题描述】:

尝试在 EC2 实例上打开与 DuckDb 的连接时:

NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

我收到以下错误:

Caused by: java.lang.UnsatisfiedLinkError: 'java.nio.ByteBuffer org.duckdb.DuckDBNative.duckdb_jdbc_startup(byte[], boolean)'
        at org.duckdb.DuckDBNative.duckdb_jdbc_startup(Native Method)
        at org.duckdb.DuckDBDatabase.<init>(DuckDBDatabase.java:22)

开码连接如下:

try {
    DuckDBDatabase duckDb = new DuckDBDatabase("jdbc:duckdb:", false);
    connection= new DuckDBConnection(duckDb);
} catch (SQLException e) {
    throw new RuntimeException("Unable to open DuckDB connection.", e);
}

DuckDb 被添加为 gradle 中的依赖项:

implementation 'org.duckdb:duckdb_jdbc:0.2.4'

相同的代码在 Windows 和 Linux 上本地运行。有什么想法吗?

【问题讨论】:

    标签: java amazon-ec2 native unsatisfiedlinkerror duckdb


    【解决方案1】:

    问题在于架构。在深入研究 DuckDb 代码后,发现它只接受 x86_64 和 amd64。我们的实例是 aarch64,因此从未加载过 .so 文件。

    【讨论】:

    • 所以问题是架构不正确(ARM),对吗?感谢您提供决议。请务必“接受”!仅供参考,只有“A1”是 ARM。我怀疑其他不同的 EC2 实例类型(M4、T2 等)应该没问题:aws.amazon.com/ec2/instance-types
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多