Я пытаюсь заставить этот maven projekt работать на Raspberry Pi 3, но датчик DHT11 дает мне следующее ошибка:
sudo java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' com.epam.llpd.greenhouse.web.ServerStarter
java.lang.UnsatisfiedLinkError: no dhtreader in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.epam.llpd.greenhouse.sensor.Sensor.<clinit>(Sensor.java:16)
at com.epam.llpd.greenhouse.PiHardwareController$1.run(PiHardwareController.java:132)
В папке \src\main\java\com\epam\llpd\greenhouse\sensor
находится файл dhtreader.c
.
Я скомпилировал бинарный объект с помощью следующей команды:
gcc -o dhtreader.so -lc -shared -I/usr/lib/jvm/jdk-7-oracle-arm-vfp-hflt/include -I/usr/lib/jvm/jdk-7-oracle-arm-vfp-hflt/include/linux dhtreader.c -l bcm2835
dhtreader.so
находится в той же папке, что и .jar
.
Файл dhtreader.c представляет собой общий класс C, специфичный для Raspberry Pi для использования датчиков DHT11 и DHT22, он используется во многих проектах Raspberry Pi и имеет множество источников, таких как вот этот.
Этот класс C (dhtreader.c) используется через. JNI/C, но он просто не работает из-за указанной выше ошибки.
Я уже пытался установить java.library.path
с помощью следующего метода в основном java:
System.setProperty("java.library.path", "./");
Это не помогло. Вместо этого я добавил -Djava.library.path=./
в команду java:
sudo java -classpath '.:classes:*:classes:/opt/pi4j/lib/*' com.epam.llpd.greenhouse.web.ServerStarter -Djava.library.path=./
Но и это не помогло.
Теперь я застрял и не знаю, как добавить dhtreader.so
к java.library.path
.
Как добавить dhtreader.so
к java.library.path
?
Сначала я спросил в Raspberry Pi StackExchange, но они подумали, что это отключено. -тема.