树莓派4B上IntelliJ IDEA无法运行Pi4J示例的技术求助
问题描述
我要为RPI3开发一个项目,需求包括:
- 控制外部设备
- 读取投币器信号
- 输出1920x1080分辨率的游戏画面
最初用Processing实现所有功能,但图形渲染速度极慢,而且它不支持Open GL ES(我认为这是卡顿的主要原因)。所以计划迁移到LibGDX完成项目,同时找了个能和GPIO简单交互的库Pi4J,但运行测试示例时失败了。
在树莓派4B(64位Raspberry Pi OS)上运行Pi4J第一个示例时,出现如下错误:
/root/.jdks/liberica-11.0.18/bin/java -javaagent:/home/MGDSStudio/Software/idea-IC-223.8617.56/lib/idea_rt.jar=34803:/home/MGDSStudio/Software/idea-IC-223.8617.56/bin -Dfile.encoding=UTF-8 -classpath /home/MGDSStudio/GD/Tests/Pi4j/pi4j-v1/pi4j-example/target/classes:/home/MGDSStudio/GD/Tests/Pi4j/pi4j-v1/pi4j-core/target/classes:/root/.m2/repository/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar:/root/.m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar BlinkGpioExample <--Pi4J--> GPIO Blink Example ... started. Mar 08, 2023 7:27:37 PM com.pi4j.util.NativeLibraryLoader load SEVERE: Unable to load [libpi4j] using path: [/lib/raspberrypi/dynamic/libpi4j-aarch64.so] java.io.FileNotFoundException: File /lib/raspberrypi/dynamic/libpi4j-aarch64.so was not found in classpath.
我用的是Liberica JDK-11,请问是设备还是环境的问题?另外在Khadas Vim3 Pro(64位Ubuntu 20.04)上测试也没成功。
解决方案
这个错误的核心是Pi4J v1版本不支持64位ARM系统(aarch64),你使用的树莓派4B、Khadas Vim3 Pro都是64位aarch64架构,而Pi4J v1仅提供32位ARM(armhf)的本地库,所以找不到对应的libpi4j-aarch64.so文件。
解决步骤如下:
- 切换到Pi4J v2版本:Pi4J v2完全适配64位ARM系统,重构了本地库加载逻辑,支持更多硬件平台。
- 修正依赖配置:如果用Maven/Gradle构建项目,确保引入Pi4J v2的核心库,比如Maven中添加:
<dependency> <groupId>com.pi4j</groupId> <artifactId>pi4j-core</artifactId> <version>2.6.0</version> </dependency> - 自动适配架构:Pi4J v2会自动检测系统架构并加载对应本地库,无需手动指定路径。
- 确保权限充足:GPIO操作需要root权限,运行测试程序时加上
sudo前缀。
另外,针对LibGDX在树莓派上的渲染优化,建议在启动参数中添加-Dorg.lwjgl.opengl.display.WindowImplementation=org.lwjgl.opengles.EGLWindowImplementation,强制启用Open GL ES支持,提升渲染性能。
内容的提问来源于stack exchange,提问作者Alexander Gorodilov
相关产品推荐
相关产品推荐

