JNI方法的未定义参考

时间:2015-05-05 17:55:50

标签: java-native-interface

我试图将JNI用于现有的C库。当我尝试使用此命令生成.so文件时:

gcc -shared -fpic -o libWrapper.so -I/usr/lib/jvm/java-1.7.0-openjdk-i386/include/ -I/usr/lib/jvm/java-1.7.0-openjdk-i386/include/linux/ -I/home/testdpdk/packet-pro/dpdk-2.0.0/i686-native-linuxapp-gcc/include Wrapper.c -Wl,-z,defs

我得到的错误与JNI中包含的方法的未定义引用有关:

/tmp/ccyrfz1B.o: In function `Java_Wrapper_eal_1init':
Wrapper.c:(.text+0x62): undefined reference to `GetObjectArrayElement'
Wrapper.c:(.text+0x7f): undefined reference to `GetStringUTFChars'
Wrapper.c:(.text+0xce): undefined reference to `env_init'

如何让JNI方法引用工作?另外,我如何将现有的C库链接到此共享对象文件中,以便' env_init'方法(libWrapper.so)?

1 个答案:

答案 0 :(得分:1)

您似乎正在呼叫GetObjectArrayElement和朋友作为功能。它们不是函数:它们是env中的函数指针。将它们称为

(*env)->GetObjectArrayElement(env, ...)