Я скачал "jnetpcap-1.4.r1425-1.linux64.x86_64.tgz". Структура дерева каталогов выглядит так.
jnetpcap-1.4.r1425
â  âââ CHANGE_LOG.txt
â  âââ COPYING
â  âââ COPYING.LESSER
â  âââ include
â  â  âââ analysis.h
â  â  âââ export.h
â  â  âââ jnetpcap_bpf.h
â  â  âââ jnetpcap_dumper.h
â  â  âââ jnetpcap_ids.h
â  â  âââ jnetpcap_utils.h
â  â  âââ mac_addr.h
â  â  âââ nio_jbuffer.h
â  â  âââ nio_jmemory.h
â  â  âââ packet_flow.h
â  â  âââ packet_jscanner.h
â  â  âââ packet_protocol.h
â  â  âââ util_crc16.h
â  â  âââ util_crc32.h
â  â  âââ util_debug.h
â  â  âââ util_in_cksum.h
â  â  âââ winpcap_ext.h
â  â  âââ winpcap_ids.h
â  â  âââ winpcap_stat_ex.h
â  âââ jnetpcap.jar
â  âââ libjnetpcap-pcap100.so
â  âââ libjnetpcap.so
â  âââ RELEASE_NOTES.txt
Я поместил банку в папку lib и другие файлы .soи родная папка в bin, где исполняется моя программа.
Но все равно я получаю
java.lang.UnsatisfiedLinkError: com.slytechs.library.NativeLibrary.dlopen(Ljava/lang/String;)J
at com.slytechs.library.NativeLibrary.dlopen(Native Method)
at com.slytechs.library.NativeLibrary.<init>(Unknown Source)
at com.slytechs.library.JNILibrary.<init>(Unknown Source)
at com.slytechs.library.JNILibrary.loadLibrary(Unknown Source)
at com.slytechs.library.JNILibrary.register(Unknown Source)
at com.slytechs.library.JNILibrary.register(Unknown Source)
at com.slytechs.library.JNILibrary.register(Unknown Source)
at org.jnetpcap.PcapBpfProgram.<clinit>(Unknown Source)
at pcap.reconst.reconstructor.jnetpcap.PCAPProvider.<init>(PCAPProvider.java:34)
at pcap.reconst.reconstructor.jnetpcap.PcapReconstructor.reconstruct(PcapReconstructor.java:129)
Затем я подумал открыть банку и посмотреть, какой файл он пытается загрузить.И я нашел
package com.slytechs.library;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@Library(natives={"Kernel"}, jni={"jnetpcap"})
public class NativeLibrary
Так что мой вопрос в том, какой файл он пытался загрузить изначально
@ Library (natives = {"Kernel"}, jni = {" jnetpcap"})
Я подозреваю, что jnetpcap.so и этот файл недоступен в комплекте с пакетом.
В Windows у меня возникла проблема с зависимостью, которая требовала отсутствия wpcap.dll и packet.dll, поэтомуя поместил и смог выполнить.
Для centos он даже не загружает библиотеку.
И если я сделаю ldd *. *, то вот, что видят, находит некоторую зависимость.
[root@ajay-centos jnetpcap-1.4.r1425]# ldd *.*
CHANGE_LOG.txt:
ldd: warning: you do not have execution permission for `./CHANGE_LOG.txt'
not a dynamic executable
COPYING.LESSER:
ldd: warning: you do not have execution permission for `./COPYING.LESSER'
not a dynamic executable
jnetpcap.jar:
ldd: warning: you do not have execution permission for `./jnetpcap.jar'
not a dynamic executable
libjnetpcap-pcap100.so:
ldd: warning: you do not have execution permission for `./libjnetpcap-pcap100.so'
linux-vdso.so.1 => (0x00007ffc7db75000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007ff58fcca000)
libjnetpcap.so => not found
libpcap.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007ff58f906000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff58f604000)
/lib64/ld-linux-x86-64.so.2 (0x00005612c81b7000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff58f3ed000)
libjnetpcap.so:
ldd: warning: you do not have execution permission for `./libjnetpcap.so'
linux-vdso.so.1 => (0x00007ffd785cb000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fb786ba2000)
libpcap.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007fb7867de000)
libm.so.6 => /lib64/libm.so.6 (0x00007fb7864dc000)
/lib64/ld-linux-x86-64.so.2 (0x000055d6d5c57000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb7862c6000)
RELEASE_NOTES.txt:
ldd: warning: you do not have execution permission for `./RELEASE_NOTES.txt'
not a dynamic executable.
Я вижу много вопросов, которые, как говорят люди, меняют имя .so файла и многое другое.
Что будет исправлением в centos.А точнее @Library (natives = {"Kernel"}, jni = {"jnetpcap"}) Что такое jni = {"jentpcap"} и natives = {"Kernel"}