При загрузке библиотеки C ++ .so в Java возникает ошибка: неопределенный символ: XOpenDisplay

Этот вопрос следует за этим один. Я могу найти библиотеку, но при ее загрузке возникает следующая ошибка

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.

Спасибо

0

Решение

Посмотрите здесь:

https://github.com/mkowsiak/jnicookbook/blob/master/recipeNo023/Makefile

В этом примере кода вы можете увидеть, как работать с кодом JNI, для работы которого требуется другой код.

Просто убедитесь, что библиотека с «XOpenDisplay» (xlib — как уже упоминалось в sithereal) видна JVM (например, добавьте ее в LD_LIBRARY_PATH или в пользовательский -Wl, -rpath при сборке кода JNI).

Веселитесь с JNI.

1

Другие решения

Как вы видете Вот gtengine использует библиотеку X11. Который, в вашем случае, выглядит отсутствующим. XOpenDisplay функция находится в библиотеке xlib.

2

По вопросам рекламы [email protected]