我有一个使用 Java 6 在 Linux 机器上编译的 JNI 应用程序。当我尝试在安装了 Java 7 的机器上运行它时,出现以下错误:
./test:加载共享库时出错:libjvm.so:无法打开共享对象文件:没有这样的文件或目录
问题是 libjvm.so 位于/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server
第二台机器上,而该目录不在RPATH
:
$ objdump -x test | grep RPATH
RPATH /usr/lib/jvm/java-6-openjdk/jre/lib/amd64:/usr/lib/jvm/ja
va-6-openjdk/jre/lib/amd64/server
一个明显的解决方案是添加/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server
到RPATH
,但我想知道是否有更通用的方法来解决这个问题并使应用程序与系统上安装的任何 JVM 一起工作?