java.library.path 中没有 dhtreader
No dhtreader in java.library.path
我尝试在 Raspberry Pi 3 上将此 Maven projekt 设置为 运行,但 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.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 class 文件,专门用于 Raspberry Pi 使用 DHT11 和 DHT22 传感器,它在许多 Raspberry Pi 项目中使用并且具有很多来源,例如 this one.
这个Cclass(dhtreader.c)被via使用了。 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 中询问,但他们认为这是题外话。
尝试简单地将 dhtreader.so
重命名为 libdhtreader.so
。
确实,当我们在 java 中调用 System.loadLibrary("foo")
时,库的预期名称是:
- Windows:
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
注意:上面的命令假定您的 lib 位于 lib 目录中,该目录本身位于命令启动的目录中。
我尝试在 Raspberry Pi 3 上将此 Maven projekt 设置为 运行,但 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.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 class 文件,专门用于 Raspberry Pi 使用 DHT11 和 DHT22 传感器,它在许多 Raspberry Pi 项目中使用并且具有很多来源,例如 this one.
这个Cclass(dhtreader.c)被via使用了。 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 中询问,但他们认为这是题外话。
尝试简单地将 dhtreader.so
重命名为 libdhtreader.so
。
确实,当我们在 java 中调用 System.loadLibrary("foo")
时,库的预期名称是:
- Windows:
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
注意:上面的命令假定您的 lib 位于 lib 目录中,该目录本身位于命令启动的目录中。