将C链接到JNI,独立于JDK版本

时间:2018-06-18 17:20:14

标签: java c java-native-interface

我通过JNI在我的C程序中调用Java应用程序。

安装了JDK 1.8后,我的系统上有以下JNI .so库:

/usr/java/jdk1.8.0_51/jre/lib/amd64/jli/libjli.so
/usr/java/jdk1.8.0_51/jre/lib/amd64/server/libjvm.so

要使ldconfig知道这两个文件,我可以在/usr/lib64/中创建指向它们的链接,或者创建一个列出它们的/etc/ld.so.conf.d/java.conf文件。

这允许我按如下方式编译我的C代码:

gcc -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ \
-L/usr/java/jdk1.8.0_51/jre/lib/amd64/jli \
-L/usr/java/jdk1.8.0_51/jre/lib/amd64/server/ \
callSomeJava.c -ljvm -ljli

这感觉就像系统黑客而不是开发和部署JNI代码的可靠方式。 JDK并不觉得它以鼓励依赖它们的方式将这些库暴露给操作系统。

我的问题如下:

  • 为什么JDK包含这些库的linker name lib.so )而不是real name lib.so.NN ) ? 3.1.1. Shared Library Names
  • 应该我从哪里获得所需的库,所以它们已经以可链接的方式安装而没有我的系统黑客攻击?
  • 如何以下列方式编译/部署我的C:
      每当我更新JDK时,
    • 都不依赖于我手动维护ldconfig
    • 允许生成的a.out在没有ldconfig hacks的部署环境中查找lib?

0 个答案:

没有答案