Этот вопрос следует за этим один. Я могу найти библиотеку, но при ее загрузке возникает следующая ошибка
java.lang.UnsatisfiedLinkError: /home/name/Documents/Development/GitLocalRepo/hidden-mathLibrary/hidden/lib/Distribution/libgtengine.so.3.7: /home/name/Documents/Development/GitLocalRepo/hidden-mathLibrary/hidden/lib/Distribution/libgtengine.so.3.7: undefined symbol: XOpenDisplay
код, вызывающий ошибку, выглядит следующим образом:
public class Frame {
static {
System.loadLibrary( "gtengine" ); // <- error occurs here
}
public interface libWrapper extends Library {
libWrapper INSTANCE = (libWrapper)
Native.loadLibrary(
"gtengine",
libWrapper.class );
Pointer FrameCstructor(String name, long parent,
double x, double y, double z,
double rotX, double rotY, double rotZ,
double vX, double vY, double vZ,
double angVx, double angVy, double angVz,
double accX, double accY, double accZ,
double angAccX, double angAccY, double angAccZ,
boolean addToFramelist);
}
public static native Pointer FrameCstructor(String name, long parent,
double x, double y, double z,
double rotX, double rotY, double rotZ,
double vX, double vY, double vZ,
double angVx, double angVy, double angVz,
double accX, double accY, double accZ,
double angAccX, double angAccY, double angAccZ,
boolean addToFramelist);
private Pointer ptrToCFrame;
public Frame(String name, int parent,
double x, double y, double z,
double rotX, double rotY, double rotZ,
double vX, double vY, double vZ,
double angVx, double angVy, double angVz,
double accX, double accY, double accZ,
double angAccX, double angAccY, double angAccZ,
boolean addToFramelist) {
System.out.println("library: " + System.getProperty( "java.library.path" ));
ptrToCFrame = libWrapper.INSTANCE.FrameCstructor( name, parent,
x, y, z, rotX, rotY, rotZ,
vX, vY, vZ, angVx, angVy, angVz,
accX, accY, accZ, angAccX, angAccY, angAccZ,
addToFramelist );
}
}
Это связано с наличием некоторых ссылок на X11 в библиотеке? Удалить его из библиотеки будет огромной работой! Я работаю над Fedora 25.
Спасибо
Посмотрите здесь:
https://github.com/mkowsiak/jnicookbook/blob/master/recipeNo023/Makefile
В этом примере кода вы можете увидеть, как работать с кодом JNI, для работы которого требуется другой код.
Просто убедитесь, что библиотека с «XOpenDisplay» (xlib — как уже упоминалось в sithereal) видна JVM (например, добавьте ее в LD_LIBRARY_PATH или в пользовательский -Wl, -rpath при сборке кода JNI).
Веселитесь с JNI.
Как вы видете Вот gtengine использует библиотеку X11. Который, в вашем случае, выглядит отсутствующим. XOpenDisplay
функция находится в библиотеке xlib.