javah生成的头文件在方法名前加1

本文探讨了Java Native Interface (JNI) 在将Java方法名映射为C/C++函数名时的转换规则,特别是如何处理方法名中的下划线('_'),并解释了为何某些情况下会在生成的C/C++函数名中添加数字'1'。
摘要由CSDN通过智能技术生成

今天编程的时候遇到,

java类中的本地函数声明是:

private native static int open_device(String path); 

而在生成的头文件中确实这样的:

JNIEXPORT jint JNICALL Java_com_coban_a83tled_A83TLed_open_1device(JNIEnv *, jclass, jstring);明显在方法名中多了一个1;


然后我把函数名声明称这样:

private native static int open(String path);

而生成的头文件中是这样的:

JNIEXPORT jint JNICALL Java_com_coban_a83tled_A83TLed_open (JNIEnv *, jclass, jstring);很明显这样没有1;


然后我把函数名声明称这样:

private native static int open_led_device(String path);

而生成的头文件中是这样的:

JNIEXPORT jint JNICALL Java_com_coban_a83tled_A83TLed_open_1led_1device (JNIEnv *, jclass, jstring);很明显多了俩1

通过这样可以看出来,和函数声明中的下划杠“_”有关。经过查资料,因为jni把C函数名映射成java方法名的时候是com_mypackage_myclass_mymethod();com.mypackage.myclass.mymethod();也就是说jni是依靠下划杠'_'来间隔包、类、方法的,但是如果你的方法名中有'_'字符的话,jni必须能够区分方法名中的'_'字符还是间隔符,所以用加一个1后缀的方式来区分。


所以声明的时候还是要注意点,不过不影响我们使用。


借鉴了:

http://www.01yun.com/other/20160308/658170.html    

http://www.myexception.cn/j2se/681720.html

在这里表示感谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值