【问题标题】:Linking JNI code with the JVM将 JNI 代码与 JVM 链接
【发布时间】:2017-05-21 19:20:27
【问题描述】:

本质上,问题是这样的。我有一个 Java 程序,我从中加载了一个 JNI 库。该 JNI 库是否可以链接到 HotSpot 的 libjvm.so 共享库,并相应地调用 HotSpot 独有的函数 - 即在 jni.h 之外?

当我尝试以直接的方式这样做时,结果是程序崩溃:

java: symbol lookup error: /path/to/libtest.so: undefined symbol: _ZNK7oopDesc5klassEv

这给出了加载失败的外观,因为它无法解析 HotSpot 唯一的 oopDesc 类。对于生成可以以这种方式链接的库有什么建议吗?

编辑:还尝试在编译时链接到libjava.so,但没有成功。

【问题讨论】:

    标签: java java-native-interface


    【解决方案1】:

    如果您要加载的 libjvm.so 与 java EXE 隐式链接的 libjvm.so 不同,这将不起作用,因为除非您执行类似 trick 或那trick。 java EXE 是否加载了相同的 libjvm.so 您的库想要引用?如here 所述,您应该能够分辨出 java EXE 加载了哪个 .so。

    如果 java EXE 和您的库都想要相同的 .so 并且仍然无法正常工作,我不知道该说什么。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    相关资源
    最近更新 更多