【问题标题】:JNI error when directory with .so my .so depends on did not exist带有.so的目录时出现JNI错误,我的.so所依赖的目录不存在
【发布时间】:2016-09-21 14:17:21
【问题描述】:

不要问我为什么需要它,相信我,我会安装非常简单。我有 libjnitester.so 中的本机方法。 libjnitester.so 依赖于 libcall.so (库只是模拟真实的)。在调用本机方法之前,我需要将库动态安装到目录中。为此,我使用 File.mkdris 创建目录,然后调用 tar 将 tar.gz 提取到该目录中(我等待 tar 过程完成,因此在我调用 JNI 方法时文件肯定已经存在)。调用该方法时,我得到:

java.lang.UnsatisfiedLinkError: /.../libjnitester.so: libcall.so: 无法打开共享对象文件:没有这样的文件或目录

我指定了-Djava.library.path 并定义了LD_LIBRARY_PATH。我假设问题出在LD_LIBRARY_PATH - 中,因为我启动 JVM 时目录不存在,并且仅在执行期间创建,它被忽略。如果我预先创建目录(没有 .so 文件)然后启动 JVM 一切正常。

问题 - 如何使用我的 JNI 方法和它所依赖的 .so 文件将 .so 动态安装到新目录中?

【问题讨论】:

标签: java java-native-interface


【解决方案1】:

安装库后,为每个 .so 文件调用 System.load()。那应该动态加载库。此时您应该能够调用您的本机方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2012-11-11
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多