我正在尝试在java类中创建JNI函数以及同一类中的java函数。
以下是创建的三个文件的代码
1)包含java函数的类:
package org.jnp.pkg001;
public class HelloNative {
static {
System.loadLibrary("lib/HelloNativeLib");
}
public native void cprintLineOne ();
public native void cprintLineTwo ();
public void jprintLineOne ()
{
System.out.println("Hi, I am in Java First Function");
}
public void jprintLineTwo ()
{
System.out.println("Hi, I am in Java Second Function");
}
}
2)原生函数实现:
#include "org_jnp_pkg001_HelloNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_org_jnp_pkg001_HelloNative_cprintLineOne
(JNIEnv *, jobject)
{
printf("Hi, I am in C First Function\n");
}
JNIEXPORT void JNICALL Java_org_jnp_pkg001_HelloNative_cprintLineTwo
(JNIEnv *, jobject)
{
printf("Hi, I am in C Second Function\n");
}
3)包含主要
的Java类package test.jnp.pkg001;
import org.jnp.pkg001.HelloNative;
public class HelloNativeTest {
public static void main(String[] args) {
HelloNative hn= new HelloNative();
hn.cprintLineOne();
hn.jprintLineOne();
hn.cprintLineTwo();
hn.jprintLineTwo();
}
}
我得到如下输出,这与调用函数的顺序不匹配
Hi, I am in Java First Function
Hi, I am in Java Second Function
Hi, I am in C First Function
Hi, I am in C Second Function
有谁能告诉我为什么这个序列与函数调用序列不匹配?并提出一个解决方案。