我正在为 google/leveldb 编写一个 Kotlin 多平台包装器。上下文链接:
对于 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_"
:所有符号都在那里,完美的名字,没有放大问题是系统在运行时的本机代码中缺少库
libwinpthread-1.dll
。我的解决方案是静态链接libwinpthread
,现在一切正常!