javah生成jni函数名的bug

96
qc1iu
2018.06.30 16:00* 字数 216

背景知识

  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

日记本
Web note ad 1