[英]JNI Header file generating class
我目前正在使用JNI为Java类ABC中使用的本机方法生成C标头。 但是,我想在其他类XYZ中的其他地方使用这些方法,因此我制作了一个名为cLib的类,该类基本上只有本机方法的原型,并且在生成时为我提供了所需方法的头文件。 。
问题是,JNI将在原型文件中声明了原型的Java类的名称附加到头文件中的函数名称,所以我是否需要为每个Java类ABC,XYZ分别生成两个头文件?
最好。
三种选择:
public class Boo {
public V doSomething(...) {
return (Common.doSomething(...));
}
}
public class Wow {
public V doSomething(...) {
return (Common.doSomething(...));
}
}
public class Common {
public static native V doSomething(...);
}
/** Trivial JNI Implementation omitted... */
public class Boo {
public V native doSomething(...);
}
public class Wow {
public V native doSomething(...);
}
/** Both JNI methods call same C/Assembly native function, similarly... */
参见java.lang.Compiler
干杯,leoJava
从另一个角度看问题……在用于构造“ libPOW.so”的单个LIB.c文件中包括几个类的本机代码是没有问题的。
考虑文件“ LIB.c”的以下内容:
/* Common Header Files... including jni.h / /
* Class: your.pkg.Boo
* Method: doSomething
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_your_pkg_Boo_doSomething(
JNIEnv env, jobject jobj, jint job) { ... } /
* Class: your.pkg.Wow
* Method: doSomething
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_your_pkg_Wow_doSomething(
JNIEnv *env, jobject jobj, jint job)
{
...
}
然后通过以下方式进行编译:
$(CC) $(CCOPTS) [$(CCOPTS64)] $(JAVAOPTS) LIB.c -o libPOW.so
哪里:
CCOPTS == "-G -mt" (solaris) OR "-Wall -Werror -shared -shared-libgcc -fPIC" (Linux) CCOPTS64 == "-xcode=pic32 -m64" (SparcV9) OR "-m64" (AMD64) JAVAOPTS == "-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/$(OSNAME) -I."
干杯,leoJava
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.