gpt4 book ai didi

java - 使用 jni 从 c 调用 java 函数

转载 作者:搜寻专家 更新时间:2023-10-31 20:05:10 24 4
gpt4 key购买 nike

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

以下是我的代码:

#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);
}

我正在使用以下代码编译上述程序:gcc -o 调用 -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,然后得到一个对 FUNCTION_NAME 的 undefined reference 我在 Rhel 6.2 上运行它

最佳答案

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

关于java - 使用 jni 从 c 调用 java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9937229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com