Как исправить ошибку java.lang.UnsatisfiedLinkError для JSSC?(Тяжело плавать?) - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть приложение Java в JAR, которое должно обмениваться данными через последовательный порт, используя JSSC (в Ubuntu на плате SOPine).Он генерирует исключение java.lang.UnsatisfiedLinkError, потому что «/root/.jssc/linux/libjSSC-2.7_armsf.so: не удается открыть файл общего объекта: такого файла или каталога нет».Полное сообщение об исключении находится внизу.

Я экспортировал свой JAR-файл в Eclipse с jssc.jar, добавленным в библиотеки Java Build Path проекта в Classpath и включенным в экспортируемые записи.

Я подтвердил, что файл libjSSC-2.7_armsf.so находится там:

sudo ls –la /root/.jssc/linux/
drwxr-xr-x 2 root root  4096 Sep 23 14:41 .
drwxr-xr-x 3 root root  4096 Sep 20 15:39 ..
-rw-r--r-- 1 root root 10539 Sep 20 15:39 libjSSC-2.7_armsf.so

Ближайший ответ на мою проблему, который я могу найти, - это вопрос переполнения стека ошибка неудовлетворительной ссылки, ссылка на исполняемый файл jarбиблиотека jssc .Я подтвердил, что используемая мной плата SOPine имеет модуль VFPv4 с плавающей запятой , содержит каталог / lib / arm-linux-gnueablhf /, и у меня есть JDK bellsoft-java11: armhf (из dpkg -l) установлен, поэтому мне не ясно, почему он использует libjSSC-2.7_arm sf .so вместо libjSSC-2.7_arm hf .so, который находится в том же jssc.jar.

Я попытался добавить libjSSC-2.7_arm hf .so в каталог /root/.jssc/linux/, установить libjssc-java в linux и изменить LD_LIBRARY_PATH и -Djava.library.path указывает на другой каталог, но он выдает то же исключение, что он не может найти libjSSC-2.7_arm sf .so.

Я использую следующую команду для запуска JARфайл с сосновым пользователем:

sudo java -jar product-0.1.0.jar &> output-0.1.0_1.txt

Вот исключение, которое я получаю:

Exception in thread "CommThread" java.lang.UnsatisfiedLinkError: /root/.jssc/linux/libjSSC-2.7_armsf.so: /root/.jssc/linux/libjSSC-2.7_armsf.so: cannot open shared object file: No such file or directory
    at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430)
    at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487)
    at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2617)
    at java.base/java.lang.Runtime.load0(Runtime.java:767)
    at java.base/java.lang.System.load(System.java:1831)
    at jssc.SerialNativeInterface.<clinit>(SerialNativeInterface.java:172)
    at jssc.SerialPort.<init>(SerialPort.java:118)
    at com.company.comm.transport.serial.CommSerial.initialize(CommSerial.java:51)
    at com.company.product.adapters.comm.Communicator.connect(Communicator.java:73)
    at com.company.product.services.comm.CommThread.run(CommThread.java:18)
...