[英]calling java function from c using jni
I'm writing a simple program to call a Java function from my C program. 我正在编写一个简单的程序来从我的C程序中调用Java函数。
Following is my code: 以下是我的代码:
#include <jni.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <stdlib.h>
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);
}
I'm compiling the above program using: gcc -o invoke -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux -L$JAVA_HOME/jre/lib/amd64/server/ ThreadPriorityTest.c 我正在使用以下命令编译上述程序:gcc -o invoke -I $ JAVA_HOME / include / -I $ JAVA_HOME / include / linux -L $ JAVA_HOME / jre / lib / amd64 / server / ThreadPriorityTest.c
and i'm getting the following error: 我收到以下错误:
/tmp/ccllsK5O.o: In function `create_vm': ThreadPriorityTest.c:(.text+0x35): undefined reference to `JNI_CreateJavaVM' collect2: ld returned 1 exit status
I'm not really sure what is causing this problem 我不太确定是什么导致了这个问题
UPDATE 1 更新1
Included the -ljvm in the command line and then got a undefined reference to FUNCTION_NAME
I'm running it on Rhel 6.2 在命令行中包含-ljvm,然后获得了
undefined reference to FUNCTION_NAME
的undefined reference to FUNCTION_NAME
我正在Rhel 6.2上运行它
You've got the path to the Java library (the -L
option), but not the library itself. 您具有Java库的路径 (
-L
选项),但没有库本身的路径 。 You need to include -ljvm
on the link line as well. 您还需要在链接行上包括
-ljvm
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.