【发布时间】:2016-08-23 18:17:11
【问题描述】:
我有一个任务如下的makeifile。当我编译时,我得到一个链接器错误,但我不知道为什么,因为我正在链接/包含到 java 库。我验证 $JAVA_HOME 存在并且 libjvm.so 存在于/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server
出错:
(.text+0x5a): undefined reference to `JNI_CreateJavaVM'
collect2: error: ld returned 1 exit status
制作文件:
my_program:
gcc -L${JAVA_HOME}/jre/lib/amd64/server/ \
-I${JAVA_HOME}/include/ \
-I${JAVA_HOME}/include/linux/ \
-ljvm \
my_program.c
run: my_program
./a.out
c 字段:
#include <jni.h>
int main ( int argc, char **argv ) {
printf("hello\n");
return 0;
}
JNIEnv *create_vm(JavaVM **jvm){
JNIEnv *env = NULL;
JavaVMInitArgs vm_args;
JavaVMOption options;
// options.optionString = "-Djava.class.path=" JAVA_PROG_PATH;
// vm_args.version = JNI_VERSION_1_7;
vm_args.nOptions = 1;
vm_args.options = &options;
vm_args.ignoreUnrecognized = 0;
int ret = JNI_CreateJavaVM(jvm, (void **)&env, &vm_args);
char *failed = "nothing";
if(ret < 0){
goto create_vm_error;
}
return env;
lookup_error:
dlog(0, "Error looking up class or method %s.\n", failed);
(**jvm)->DestroyJavaVM(*jvm);
create_vm_error:
*jvm = NULL;
return NULL;
}
【问题讨论】:
标签: java c makefile java-native-interface