美文网首页
javah生成jni函数名的bug

javah生成jni函数名的bug

作者: qc1iu | 来源:发表于2018-06-30 16:00 被阅读51次

    背景知识

    1. JNI是什么?
    2. Resolving Native Method Names

    bug

    函数重载和内部类类型作为某个重载函数的参数时,会触发javah生成的函数名不正确。
    关键条件有2个:

    1. 函数重载
    2. 内部类类型作为重载函数参数

    具体例子参考https://stackoverflow.com/questions/37230570/jni-javah-mangles-arguments-that-are-inner-classes

    bug的现象简单说就是,javah的确会按照JNI的名称解析规则生成jni函数名,但是JVM在运行时确不会按照这个名字找,因此会出现运行时找不到函数的情况。

    解决方案

    1. 有内部类类型作为参数的重载函数就别写成native
    2. 或者运行时的报错信息,手动把函数名改了

    参考

    https://bugs.openjdk.java.net/browse/JDK-8145897

    相关文章

      网友评论

          本文标题:javah生成jni函数名的bug

          本文链接:https://www.haomeiwen.com/subject/ajwtuftx.html