使用jni从c调用java函数

我正在编写一个简单的程序来从我的C程序中调用Java函数。

以下是我的代码:

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  JNIEnv* create_vm() { JavaVM* jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption options[1]; options[0].optionString - "-Djava.class.path=/home/chanders/workspace/Samples/src/ThreadPriorityTest"; vm_args.version = JNI_VERSION_1_6; vm_args.nOptions = 1; vm_args.options = &options; vm_args.ignoreUnrecognized = JNI_FALSE; JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); return env; } void invoke_class(JNIEnv* env) { jclass helloWorldClass; jmethodID mainMethod; jobjectArray applicationArgs; jstring applicationArg0; helloWorldClass = (*env)->FindClass(env, "InvocationHelloWorld"); mainMethod = (*env)->GetStaticMethodID(env, helloWorldClass, "main", "([Ljava/lang/String;)V"); applicationArgs = (*env)->NewObjectArray(env, 1, (*env)->FindClass(env, "java/lang/String"), NULL); applicationArg0 = (*env)->NewStringUTF(env, "From-C-program"); (*env)->SetObjectArrayElement(env, applicationArgs, 0, applicationArg0); (*env)->CallStaticVoidMethod(env, helloWorldClass, mainMethod, applicationArgs); } int main() { JNIEnv* env = create_vm(); invoke_class(env); } 

我正在使用以下代码编译上述程序:gcc -o invoke -I $ JAVA_HOME / include / -I $ JAVA_HOME / include / linux -L $ JAVA_HOME / jre / lib / amd64 / server / ThreadPriorityTest.c

我收到以下错误:

 /tmp/ccllsK5O.o: In function `create_vm': ThreadPriorityTest.c:(.text+0x35): undefined reference to `JNI_CreateJavaVM' collect2: ld returned 1 exit status 

我不确定是什么导致了这个问题

更新1

在命令行中包含了-ljvm,然后获得了undefined reference to FUNCTION_NAMEundefined reference to FUNCTION_NAME我在Rhel 6.2上运行它

您已经获得了Java库的路径-L选项),但没有库本身。 您还需要在链接行中包含-ljvm