Я пытался вызвать существующий нативный метод, но получил UnsatisfiedLinkError и не понимаю, почему, поскольку я скопировал существующий код из JDK и не написал свою собственную функцию C.
Я скопировал некоторый код изисходный код JDK Sockets Java.Запуск в Ubuntu.
public class Sokket {
static {
System.loadLibrary ("net");
}
static {
initProto ();
}
// rest ommited for brevity
}
Запуск этого кода приводит к:
Exception in thread "main" java.lang.UnsatisfiedLinkError:
be.good.Sokket.initProto()V
at be.good.Sokket.initProto(Native Method)
at be.good.Sokket.<clinit>(Sokket.java:12)
Я пробовал другие нативные методы, но та же ошибка, я изменил имя "net ", чтобы проверить, может ли библиотека быть найдена, и тогда я получаю ошибку, что lib не может быть найден в java.library.path
, я изменил имя" initProto ", чтобы проверить, можно ли найти метод, и затем я получаюта же ошибка.Поэтому мне кажется, что «libnet.so» в каталоге lib JDK не имеет initProto (), но также не createSocket()
.
Когда я запускаю с -verbose:jni
, я вижу, что загружено много библиотекно без ссылки на «net» или «initProto».
Как я могу вызвать существующие нативные методы из моего собственного кода?