2016-05-29 2 views
2

Я стараюсь, чтобы получить этот Maven projekt запустить на Raspberry Pi 3, но датчик DHT11 дает мне следующую ошибку:Нет dhtreader в java.library.path

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 файл.

я скомпилировать двоичный OBJEKT с помощью следующей команды:

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 для малины Pi для использования датчика DHT11 и DHT22, и он используется во многих проектах Raspberry Pi и имеет множество источников, таких как this one.

Этот класс C (dhtreader.c) используется через. JNI/C, но он просто не работает из-за ошибки выше.

Я Allready попытался установить 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, но они подумали, что это вне темы.

ответ

2

Попробуйте просто переименовать dhtreader.so в libdhtreader.so.

Действительно, когда мы называем System.loadLibrary("foo") в Java ожидаемое название библиотеки:

  • Окна:foo.dll
  • Unix/Linux:libfoo.so
  • Mac:libfoo.jnilib

Попробуйте запустить его в следующем:

sudo java -Djava.library.path=./lib -classpath '.:classes:*:classes:/opt/pi4j/lib/*' com.epam.llpd.greenhouse.web.ServerStarter 

NB: Команда выше предполагается, что Lib находится в Lib каталога, который сам находится в директории, где была запущена команда.

+0

Я взял существующий dhtreader.so и переименовал его и поместил в папку .jar. Это не сработало. В каких папках я должен разместить его? Я установил java.library.path для команды java?Или я пропустил что-то еще? – Spen

+0

да, вам нужно установить java.library.path в вашей команде java –

+0

Вы, где правильно с первой проблемой (libdhtreader.so). Вторая проблема заключалась в том, чтобы написать -Djava.library.path прямо за sudo java, а не в конце за основным классом. Теперь третья проблема заключалась в том, что libdhtreader.so не был скомпилирован с bcm2835, но это еще одна история. Спасибо за помощь! – Spen

Смежные вопросы