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

来源:互联网 发布:nginx https配置 编辑:程序博客网 时间:2024/06/10 05:24

今天编程的时候遇到,

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

private native static intopen_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 intopen_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

在这里表示感谢。


0 0