JNI java загрузить так и получил неопределенный символ Исключение - PullRequest
0 голосов
/ 01 февраля 2020

при загрузке, которая компилируется локально, я получаю исключение:

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]

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Скорее всего, ваша библиотека /home/admin/libLprProcessor.so связана с другой библиотекой, которая содержит _ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm.

У вас есть несколько вариантов:

  1. ссылка libLprProcessor.so с этой библиотекой таким образом вы передаете -rpath. Таким образом, эта дополнительная библиотека будет правильно указана из libLprProcessor.so

  2. Добавить эту библиотеку в местоположение, указанное java.library.path

  3. До начиная с Java кода, обязательно экспортируйте LD_LIBRARY_PATH таким образом, чтобы он указывал на библиотеку, используемую libLprProcessor.so

0 голосов
/ 01 февраля 2020

(. So) файлы являются общим объектом, похожим на .dll файлы в windows, для загрузки их JNI вам необходимо поместить их в / lib или / usr / lib для linux в папке system32 в windows. программы читают эти файлы из указанного c местоположения, поэтому вам нужно установить или поместить их в нужное место.

...