仅在 Windows x64 上使用 JNA 时出现 UnsatisfiedLinkError

问题描述 投票:0回答:1

我正在为 google/leveldb 编写一个 Kotlin 多平台包装器。上下文链接:

  • leveldb-builds:为 Linux、Windows、Apple 和 Android 目标(arm32、arm64、x64、共享和静态)编译二进制文件
  • kotlin-leveldb:我使用 JNA 的存储库

对于 Kotlin/JVM 和 Android 部分,我使用 JNA。使用 Gradle KMP 插件在 Android 和桌面之间共享 JVM 实现。测试也很常见。所有测试均通过(Linux x64、macOs x64 arm64、Android x64),但适用于 Windows x64。

特别是,有问题的错误是(对不起意大利人):

UnsatisfiedLinkError: The specified procedure could not be found
INFORMAZIONI: Found library resource at jar:file:/C:/Users/lamba/IdeaProjects/kotlin-leveldb/build/libs/kotlin-leveldb-jvm-1.0-SNAPSHOT.jar!/win32-x86-64/leveldb.dll
nov 13, 2024 11:43:04 PM com.sun.jna.Native extractFromResourcePath
INFORMAZIONI: Extracting library to C:\Users\lamba\AppData\Local\Temp\jna-102737879\jna900937333738511061.dll
Exception in thread "main" java.lang.UnsatisfiedLinkError: Impossibile trovare la procedura specificata.

没有其他细节。

您可以自行检查 .so 中的内容这里

我并不是真正的原生编译专家,在这一点上我真的没有想法。奇怪的是,在其他操作系统/架构上它运行得很好,你可以在测试中看到它。

我不知道如何解决这个问题。有人遇到过类似的问题吗

当然,我做了很多尝试试图弄清楚发生了什么:

  • nm -g .\leveldb.dll | findstr "leveldb_"
    :所有符号都在那里,完美的名字,没有放大
  • 我在dll中静态链接了C++标准库
  • 使用 NativeLibrary.getInstance 手动加载库,同样的错误
windows jna
1个回答
0
投票

问题是系统在运行时的本机代码中缺少库

libwinpthread-1.dll
。我的解决方案是静态链接
libwinpthread
,现在一切正常!

© www.soinside.com 2019 - 2024. All rights reserved.