javah生成jni函数名的bug

背景知识

  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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容