【发布时间】:2017-06-06 10:25:56
【问题描述】:
我见过的所有 JNI 指南(例如 JNI runtime linking)都建议我将我的 JNI 库链接到 libjvm.so:
$ gcc -I${JAVA_HOME}/include -c -o test.o test.c
$ gcc -shared -o libtest.so test.o -L${JAVA_HOME}/jre/lib/i386/server -Wl,-rpath,${JAVA_HOME}/jre/lib/i386/server -ljvm
如果我的自定义库是用 C++ 编写的,并且使用了 C++ JNI API,我可以在nm -C 输出中清楚地看到对应的弱符号:
00000690 W JNIEnv_::ThrowNew(_jclass*, char const*)
00000672 W JNIEnv_::FindClass(char const*)
不过,如果我不在命令行中提及-ljvm,自定义本机库仍然可以正常工作,可能是因为libjvm.so 会被any Java 进程。
你能告诉我什么时候绝对需要明确链接libjvm.so吗?
【问题讨论】:
标签: java linker java-native-interface shared-libraries