JNI 方法的未定义引用

Undefined reference for JNI methods

我正在尝试将 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 方法引用正常工作?另外,我如何 link 一个现有的 C 库到这个共享目标文件的 'env_init' 方法(libWrapper.so)?

您似乎在调用 GetObjectArrayElement 和朋友作为函数。它们不是函数:它们是 env 中的函数指针。称他们为

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