gary-rowe / hid4java

A cross-platform Java Native Access (JNA) wrapper for the libusb/hidapi library. Works out of the box on Windows/Mac/Linux.
MIT License
223 stars 70 forks source link

hid4java always uses the libusb variant of libhidapi on linux-x86-64 #139

Closed kgmt0 closed 10 months ago

kgmt0 commented 10 months ago

Regardless of any settings, hid4java always use the libusb variant of libhidapi. Looking at the .so files in the resources folder, I found that libhidapi.so and libhidapi-libusb.so in the linux-x86-64 and linux-amd64 folder are exactly the same, and both of them seems to be the libusb variant.

$ ~/hid4java/src/main/resources $ md5sum **/*.so
0f1f324dad9ac14aba60db1cc3ad6799  linux-aarch64/libhidapi-libusb.so
4292f1280de0b0a33251b25a1e269524  linux-aarch64/libhidapi.so
d72899d0d5917ab2110c70064dd3613c  linux-amd64/libhidapi-libusb.so
d72899d0d5917ab2110c70064dd3613c  linux-amd64/libhidapi.so
85881e611fd498490b096e21252c03ee  linux-armel/libhidapi-libusb.so
c0c4ad40aa7b514e508d79a2d1105b4b  linux-armel/libhidapi.so
c41fbbd9093ec9455f6dd8d388419c7e  linux-arm/libhidapi.so
d72899d0d5917ab2110c70064dd3613c  linux-x86-64/libhidapi-libusb.so
d72899d0d5917ab2110c70064dd3613c  linux-x86-64/libhidapi.so
24e7056aff9ad0799f9357de74c1d29c  linux-x86/libhidapi-libusb.so
a0d3e1261f7b1d03b5df43cf65f6a39a  linux-x86/libhidapi.so
$ ~/hid4java/src/main/resources $ ldd linux-x86-64/libhidapi-libusb.so
    linux-vdso.so.1 (0x00007fffd9b5f000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007f00d875b000)
    libusb-1.0.so.0 => /usr/lib/libusb-1.0.so.0 (0x00007f00d873d000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f00d8738000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f00d81b3000)
    libudev.so.1 => /usr/lib/libudev.so.1 (0x00007f00d8701000)
    /usr/lib64/ld-linux-x86-64.so.2 (0x00007f00d8771000)
    libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f00d86f5000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f00d86ce000)
$ ~/hid4java/src/main/resources $ ldd linux-x86-64/libhidapi.so
    linux-vdso.so.1 (0x00007ffcd9bd1000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007f1ac809d000)
    libusb-1.0.so.0 => /usr/lib/libusb-1.0.so.0 (0x00007f1ac807f000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f1ac807a000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f1ac7bb3000)
    libudev.so.1 => /usr/lib/libudev.so.1 (0x00007f1ac8043000)
    /usr/lib64/ld-linux-x86-64.so.2 (0x00007f1ac80b3000)
    libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f1ac8037000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f1ac8010000)

The libusb variant doesn't work for my use case because I'm trying to use hid4java with virtual HID devices, which doesn't get detected by libusb.

kgmt0 commented 10 months ago

Looks like this has already been fixed in develop, although the version on Maven still doesn't have this fix included.