我尝试让这个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
个文件。
我使用以下命令编译了二进制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文件是特定于Raspberry Pi使用DHT11和DHT22传感器的常见C类,它在许多Raspberry Pi项目中使用,并且有很多来源,如this one。
通过使用此C类(dhtreader.c)。 JNI / C,但由于上述错误,它无法正常工作。
我已经尝试在java main中使用以下方法设置java.library.path
:
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询问,但他们认为这是偏离主题的。
答案 0 :(得分:2)
尝试简单地将dhtreader.so
重命名为libdhtreader.so
。
实际上,当我们在java中调用System.loadLibrary("foo")
时,库的预期名称是:
foo.dll
libfoo.so
libfoo.jnilib
尝试将其作为下一个启动:
sudo java -Djava.library.path=./lib -classpath '.:classes:*:classes:/opt/pi4j/lib/*' com.epam.llpd.greenhouse.web.ServerStarter
注意:上面的命令假定你的lib位于lib目录中,该目录本身位于启动命令的目录中。