C语言 No dhtreader in java.library.path



我试图让这个maven项目在树莓派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)

在文件夹srcmainjavacomepamllpdgreenhousesensor中有一个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类,它被用于许多Raspberrry Pi项目,并有很多类似的来源。

此C类(dhtreader.C)通过使用。JNI/C,但由于上面的错误,它无法工作。

我已经准备好在java main中使用以下方法设置java.library.path

System.setProperty("java.library.path", "./");

那也无济于事。相反,我在java命令中添加了-Djava.library.path=./

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目录中,该目录本身就位于启动命令的目录中。

相关内容

最新更新