简体   繁体   中英

No dhtreader in java.library.path

I try to get this maven projekt to run on the Raspberry Pi 3 but the DHT11 sensor gives me the following error:

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)

In the folder \\src\\main\\java\\com\\epam\\llpd\\greenhouse\\sensor there is the dhtreader.c file.

I did compile a binary objekt with the following command:

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

The dhtreader.so is placed in the same folder as the .jar .

The dhtreader.c file is a common C class specific for the Raspberry Pi to use the DHT11 and DHT22 sensor and it is used in many Raspberry Pi projects and has alot of sources like this one .

This C class (dhtreader.c) is used via. JNI/C but it just doesn't work because of the error above.

I allready tried to set the java.library.path with the following method in the java main:

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

That didn't help. Instead i added -Djava.library.path=./ to the java command:

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

But that didn't help neither.

Now i'm stuck and don't know how to add the dhtreader.so to the java.library.path .

How do i add the dhtreader.so to the java.library.path ?

I asked in the Raspberry Pi StackExchange first but they thought that it's off-topic.

Try to simply rename dhtreader.so to libdhtreader.so .

Indeed when we call System.loadLibrary("foo") in java the expected name of the library is:

  • Windows: foo.dll
  • Unix/Linux: libfoo.so
  • Mac: libfoo.jnilib

Try to launch it as next:

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

NB: The command above assumes that your lib is located in the lib directory that is itself located in the directory where the command has been launched.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM