Неудовлетворительная ошибка ссылки. Запуск jar-файла, ссылающегося на библиотеку jssc
Мы создаем пригодный для запуска java jar для бега на черной кости бигля (работает под управлением Ubuntu).
Мы создали исполняемый jar, который отлично работает на наших Mac и PC (Windows), но не будет работать в системе Ubuntu. Мы продолжаем получать следующую ошибку при запуске:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: /home/ubuntu/.jssc/linux/libjSSC-2.6_armhf.so: /home/ubuntu/.jssc/linux/libjSSC-2.6_armhf.so: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851)
at java.lang.Runtime.load0(Runtime.java:795)
at java.lang.System.load(System.java:1062)
at jssc.SerialNativeInterface.<clinit>(SerialNativeInterface.java:172)
at jssc.SerialPort.<init>(SerialPort.java:118)
at InputBoard.<init>(InputBoard.java:33)
at InputBoard.main(InputBoard.java:22)
... 5 more
Любая информация будет глубоко цениться. Как я уже сказал, это нормально работает через терминал на Mac, который основан на Unix, поэтому, похоже, он должен работать на Ubuntu. Мы понятия не имеем, почему он ссылается на каталог / home / ubuntu. Пожалуйста, дайте нам знать, если вам нужна информация о коде проекта, но я не думаю, что это будет связано.
3 ответа
Я исправил эту проблему, установив последнюю версию JDK 8 для Hard float для Arm. Ранее я пробовал несколько вещей, я пытался использовать версии 2.6, 2.7 и 2.8, указав LD_LIBRARY_PATH env. переменная, убедившись, что библиотека была в ~/.jssc/linux и т. д., и т. д., и все это безрезультатно, только после того, как я обновил java, все заработало безупречно.
Вам не хватает встроенной библиотеки времени выполнения. Вы можете установить эту библиотеку, используя apt-get для получения пакета, который она содержит. Для этого дайте эту команду.
sudo apt-get install libc6-*
У меня была такая же ошибка даже с последней версией. В моем случае оказалось, что JSSC пытается использовать версию "мягкого плавающего" нативных библиотек, которую он копирует из файла.jar. Я закончил тем, что заменил файл на версию с плавающей запятой из файла.jar и лишил права на запись в файл. После этого все заработало.