加载共享库时出错:libjvm.so:

error while loading shared libraries: libjvm.so:

我正在努力使这个 JNI example 有效。 我能够编译所有文件,但由于这个错误我无法启动可执行文件:

./TEST: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory

我检查了所有的路径,编译没有错误...
现在我认为这与我的操作系统 (OpenSuse) 或我的 java 版本有关: 我是 运行 java 1.7,代码使用 JVM 1.6 (vm_args.version = JNI_VERSION_1_6;).. JNI_VERSION_1_7 似乎不存在。

我找到了一个很好的例子,我猜是网上最好的例子之一,因为作者写下了他使用的每个文件的路径:Tutorial

我仍然遇到库问题,所以这就是我设法使所有工作正常进行的方法:

  1. 在同一个目录中创建 java 和 cc 文件(参见上面的 link)。
  2. 使用 Java class 的路径编辑 main.cc 中的以下行:

{ const_cast<char*>("-Djava.class.path=PATH_TO_JAVA_CLASS"), NULL }

  1. 转到曲目并编译 java class :

$ javac Main.java.

  1. 在您的计算机上查找文件 libjvm.so。一旦你有 找到了,编辑lib路径如下:

$ LIBPATH=PATH_TO_LIBJVM.SO

(对我来说是 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0/jre/lib/amd64/server )

  1. 导出lib路径

$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${LIBPATH}

  1. 现在你只需要编译main.cc文件。我有一个问题,因为 jni.h 没有找到:

    一个。找到jni.h(对我来说/usr/lib/jvm/java-1.7.0-openjdk-1.7.0/include/

    b。如果 jni_md.h 有问题,请在 jni.h

    的同一文件夹中创建 jni_md.h 的符号 link

    c。编译如下:

$ g++ -Wall main.cc -I/PATH_TO_jni.h -L${LIBPATH} -ljvm

  1. 应该不错:)

./a.out

Hello, world!

Hello, Java!