JNI java 加载所以得到未定义的符号异常

JNI java load so and got undefined symbol Excetion

当我加载本地编译的so时,出现异常:

Caused by: java.lang.UnsatisfiedLinkError: /home/admin/libLprProcessor.so: /home/admin/libLprProcessor.so: undefined symbol: _ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm
  at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_91]
  at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) ~[?:1.8.0_91]
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) ~[?:1.8.0_91]
  at java.lang.Runtime.load0(Runtime.java:809) ~[?:1.8.0_91]
  at java.lang.System.load(System.java:1086) ~[?:1.8.0_91]

(.so) 文件是共享对象,类似于 windows 中的 .dll 文件,供您通过 JNI 加载它们需要将它们放在 /lib/usr/lib for linux in under system32 windows 中的文件夹。 程序从特定位置读取这些文件,因此您需要安装或将它们放在正确的位置。

您的图书馆 /home/admin/libLprProcessor.so 很可能与另一个图书馆 link 编辑 - 一个包含 _ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm.

的图书馆

您在这里没有几个选择:

  1. link libLprProcessor.so 有了这个库,你就可以通过 -rpath。这样,这个附加库将从 libLprProcessor.so

  2. 正确指向
  3. 将此库添加到 java.library.path

  4. 指向的位置
  5. 在开始你的 Java 代码之前,确保导出 LD_LIBRARY_PATH 这样它指向 libLprProcessor.so

    使用的库