I have a Processing sketch that uses the IO library to use the GPIO pins on a Raspberry Pi. It works. But the sketch has reached a size and level of complexity that I want to switch to Java for additional tooling and test libraries. I’ve gotten it building and running, except for the part that uses the IO library. I copied the
io.jar from the
/usr/local/lib/processing-3.4 dir to my project, and the project builds when I have that on the classpath. I added the linux-arm64 version of
libprocessing-io.so, which seems like it should be correct. But when I run it I get this error:
OpenJDK Client VM warning: You have loaded library /usr/local/lib/processing-3.4/modes/java/libraries/io/library/linux-arm64/libprocessing-io.so which might have disabled stack guard. The VM will try to fix the stack guard now. It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. java.lang.UnsatisfiedLinkError: /usr/local/lib/processing-3.4/modes/java/libraries/io/library/linux-arm64/libprocessing-io.so: /usr/local/lib/processing-3.4/modes/java/libraries/io/library/linux-arm64/libprocessing-io.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch) at processing.opengl.PSurfaceJOGL$2.run(PSurfaceJOGL.java:408) at java.lang.Thread.run(Thread.java:748)
When I run
execstack on the
.so file I get:
execstack: "/usr/local/lib/processing-3.4/modes/java/libraries/io/library/linux-arm64/libprocessing-io.so"'s architecture is not supported
I tried all the other versions of
libprocessing-io.so and none work but this seems like the one that’s closest to being correct.
I realize I’m pretty far off the beaten path here, but it seems like I should be able to run this in plain Java, since it does work as
.pde files. It seems like I might have the wrong
.so file for Raspberry Pi? Does anyone have knowledge of how this dependency is resolved when running in plain Processing?