Hi,
I’m developing a new binding for a device having serial port. I’ve written a small test for testing interaction with the device.
The lib I’m using for talking to the serial port is
org.openhab.core.io.transport.serial.internal.SerialPortIdentifierImpl
…which in turn uses java comm implementation.
The Exception I’m getting is:
java.lang.UnsatisfiedLinkError:
Can't load either x86_64 or arm6vl .so
/tmp/2443387278465307135libSerialChannelx86_64.so: /tmp/2443387278465307135libSerialChannelx86_64.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
at org.openhab.binding.proteusecometer.internal.ProteusEcoMeterSCommunicatorTest.communicateShouldWork(ProteusEcoMeterSCommunicatorTest.java:42)
And indeed, the arch of that shared object ist:
file /tmp/2443387278465307135libSerialChannelx86_64.so
/tmp/2443387278465307135libSerialChannelx86_64.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, not stripped
So I guess java comm implementation generates the wrong shared object arch for my testing machine. Does anyone have a clue how I can influence the arch?
About my java:
java
-version
openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment (build 11.0.9+0-adhoc..source)
OpenJDK 64-Bit Server VM (build 11.0.9+0-adhoc..source, mixed mode)
The strange thing is the file name of the shared object indicates the right arch (64 bit) but the lib itself is 32 bit encoded. Any ideas?
Greetings,
Matthias