Как исправить ошибку: 'Не удалось загрузить библиотеку' toscomm ': нет toscomm в java.library.path'? - PullRequest
0 голосов
/ 22 марта 2019

Я знакомлюсь с окружающей средой Tiny OS, в настоящее время я нахожусь на уроке 4 "Последовательная связь Mote-PC и SerialForwarder", и я застрял в той части, где я должен прослушивать последовательный порт для любых входящих данных.Я пытаюсь реализовать простой пример, где мне нужно использовать скрипт TestSerial для прослушивания любых входящих сообщений, однако, когда я запускаю

java TestSerial -comm serial@/dev/ttyUSB0:iris

, мой вывод выглядит так:

Error loading the TinyOS JNI libraries the conventional way!
Attempting to load library 'toscomm'
Could not load library 'toscomm': no toscomm in java.library.path
----------
java.lang.UnsatisfiedLinkError: no toscomm in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1865)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at net.tinyos.util.TOSLibraryLoader.load(TOSLibraryLoader.java:85)
    at net.tinyos.comm.TOSCommJNI.<clinit>(TOSCommJNI.java:14)
    at net.tinyos.comm.NativeSerial.getTOSCommMap(NativeSerial.java:207)
    at net.tinyos.comm.TOSSerial.<init>(TOSSerial.java:277)
    at net.tinyos.packet.SerialByteSource.openStreams(SerialByteSource.java:67)
    at net.tinyos.packet.StreamByteSource.open(StreamByteSource.java:61)
    at net.tinyos.packet.Packetizer.openSource(Packetizer.java:149)
    at net.tinyos.packet.AbstractSource.open(AbstractSource.java:78)
    at net.tinyos.packet.Packetizer.open(Packetizer.java:142)
    at net.tinyos.packet.PhoenixSource.run(PhoenixSource.java:178)
----------

In order to load the library 'toscomm' Java tries to locate the file 'libtoscomm.so' in one of the following paths:
/usr/java/packages/lib/i386:/lib:/usr/lib

The operating system is 'Linux' (i386)

Trying to locate the file 'linux_x86_toscomm.lib' in the classpath
Temporary file created: '/tmp/toscomm3780740783398787473.lib'
Library copied successfully. Let's load it.
Library loaded successfully
serial@/dev/ttyUSB0:57600: resynchronising
Sending packet 0
Sending packet 1

наличие

Sending packet 1
Received packet sequence number 4
Sending packet 2
Received packet sequence number 5

, как описано в руководстве

Меня беспокоит предупреждение, которое я получаю, когда запускаю этот скрипт, особенно этот

Attempting to load library 'toscomm'
Could not load library 'toscomm': no toscomm in java.library.path

СогласноВ учебнике эту ошибку можно устранить, запустив

sudo tos-install-jni,

, однако, когда я ее набираю, я получаю сообщение об ошибке, что команда tos не найдена.Я попытался перейти в каталог tinyos-2.x/tools/tinyos/java. и набрал sudo make и sudo make install, тем не менее, это не сработало, также выдав следующую ошибку:

make[1]: Entering directory '/home/wsn/tinyos-main/tools'
/bin/sh ./config.status --recheck
running CONFIG_SHELL=/bin/sh /bin/sh ./configure --no-create --no-recursion
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking for ranlib... ranlib
checking for a Python3 interpreter with version >= 3.0... python3
checking for python3... /bin/python3
checking for python3 version... 
checking for python3 platform... linux
checking for python3 script directory... ${prefix}/lib/python3.4/site-packages
checking for python3 extension module directory... /lib/python/site-packages
checking for a Python interpreter with version >= 2.5... python2
checking for python2... /bin/python2
checking for python2 version... 2.7
checking for python2 platform... linux2
checking for python2 script directory... ${prefix}/lib/python2.7/site-packages
checking for python2 extension module directory... (cached) /lib/python/site-packages
checking for perl... /bin/perl
checking for python2... /bin/python2
checking for python3... /bin/python3
checking for python2.7-config... /bin/python2.7-config
checking for dot... no
configure: I can't find dot. dot is required for documentation.
checking for nescc... /bin/nescc
checking for cygwin... no
checking for JDK location... configure: error: java not found
Makefile:377: recipe for target 'config.status' failed
make[1]: *** [config.status] Error 1
make[1]: Leaving directory '/home/wsn/tinyos-main/tools'
Makefile:374: recipe for target '../../config.status' failed
make: *** [../../config.status] Error 2

Когда я пытаюсь запустить ту же команду для BaseStationсценарий, программа выдает то же самое предупреждение и просто замирает в этот момент:

serial@/dev/ttyUSB0:57600: resynchronising

Так что я даже не вижу отправленных или полученных пакетов!

Я не уверен, чтоПроблема здесь, пожалуйста, помогите.

Я использую виртуальную машину с ОС Fedora

Я пытаюсь запустить программу на платформе mib520 и использую ирисы motes

мой javaверсия

openjdk версия "1.8.0_31" Среда выполнения OpenJDK (сборка 1.8.0_31-b13) Виртуальная машина OpenJDK Server (сборка 25.31-b07, смешанный режим)

1 Ответ

1 голос
/ 23 марта 2019

Я не думаю, что ваша проблема связана с toscomm, поскольку библиотека успешно загружается, и никаких проблем не возникает.Я всегда получал одно и то же исключение, которое вы видите там каждый раз, когда я использовал последовательный порт, но никогда не удосужился починить его, так как это на самом деле не мешало работе последовательного порта.

В конце концов, я избавился от исключения, скопировав libtoscomm из каталога {TOS_ROOT}/tools/tinyos/java/serial/ в один из каталогов, в которых TinyOS ищет библиотеки. В вашем случае вы бы поместили копиюlibtoscomm файл в одном из каталогов /usr/java/packages/lib/i386, /lib или /usr/lib.

Вы можете попробовать сделать это и посмотреть, решит ли это проблему исключения для вас.

ЧтоЯ подозреваю, что причиной вашей проблемы является то, что у вас не загружен TestSerialAppC на ваш компьютер и подключен к последовательному порту.Вы удостоверились, что mote подключен к последовательному порту?

Я загрузил, запустил приложение на mote и получил вывод ниже, так что проблема не в TestSerialAppC

serial@/dev/tty.usbserial-FTYRYAHT:115200: resynchronising
Sending packet 0
Received packet sequence number 3
Sending packet 1
Received packet sequence number 4
Sending packet 2
...