确认开发板是否安装eglfs插件需执行ls /usr/lib/qt5/plugins/platforms/查看是否存在libqeglfs.so,若无则说明未安装;同时运行echo $QT_QPA_PLATFORM检查当前平台设置,若返回wayland或为空,则证实eglfs不可用。

插件缺失报错不是“少装了某个库”,而是 Qt 启动时找不到对应平台插件的路径或版本 —— 解决的关键是让 QT_QPA_PLATFORM 和 QT_QPA_PLATFORM_PLUGIN_PATH 指向开发板上真实存在的插件,而不是盲目复制文件或重装 Qt。
怎么确认开发板上到底有没有 eglfs 插件?
别猜,直接连开发板终端查:
- 运行
ls /usr/lib/qt5/plugins/platforms/(路径可能为/usr/lib/qt/plugins/platforms/或/opt/qt5/plugins/platforms/,依实际安装位置而定) - 看输出里有没有
libqeglfs.so;如果没有,就说明eglfs确实没装,硬设QT_QPA_PLATFORM=eglfs必然失败 - 顺手执行
echo $QT_QPA_PLATFORM,如果返回wayland或空,说明当前环境默认没走 eglfs,也侧面印证它不可用
Qt Creator 远程部署时怎么配环境变量?
在 Qt Creator 的项目 → 运行设置 → 运行环境里添加变量,不是改本地 Windows 环境变量:
Qt Creator 18.0.2 Windows x86_64 历史版本安装包,适合需要旧版本 IDE、旧项目兼容、Qt/C++ 项目维护、构建套件配置和调试环境回退的用户使用。
- 设
QT_QPA_PLATFORM=wayland(如果开发板有libqwayland-egl.so或libqwayland.so) - 设
QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt5/plugins/platforms(路径必须和ls输出一致,注意末尾不加斜杠) - 可选加
QT_DEBUG_PLUGINS=1,启动时会打印插件加载过程,方便定位哪一步挂了 - 不要只设
QT_PLUGIN_PATH,Qt 5.15+ 优先认QT_QPA_PLATFORM_PLUGIN_PATH
为什么复制 plugins/platforms 到程序目录不管用?
因为嵌入式环境里,Qt 加载插件依赖的是目标设备的 ABI、GL 库版本和内核驱动支持,不是“文件存在就能用”:
-
libqeglfs.so依赖libEGL.so、libGLESv2.so,用ldd /usr/lib/qt5/plugins/platforms/libqeglfs.so查是否链接正常 - 如果提示
not found,说明底层图形库缺失,得装mesa-libGLES或厂商提供的 GPU 驱动包 - 即使插件文件拷对了,但开发板跑的是 Wayland 显示服务,eglfs 就会被内核拒绝初始化 —— 此时强行启用会卡在
Could not open DRM device
Windows 上报 “windows” 插件找不到怎么办?
这通常是多个 Qt 版本共存时环境变量冲突导致的:
- 检查
QT_QPA_PLATFORM_PLUGIN_PATH是否指向旧版 Qt 的plugins/platforms目录(比如 STM32 工具链自带的 Qt) - 临时清空该变量:在 Qt Creator 运行环境里删掉它,让 Qt 自动 fallback 到程序同级的
platforms/qwindows.dll - 确保你的可执行文件目录下有
platforms/qwindows.dll,且和 Qt 构建版本位数一致(x64 程序不能用 x86 的 dll) - 用
windeployqt --no-opengl-sw yourapp.exe补全插件,比手动复制更可靠
真正麻烦的从来不是“找不到插件”,而是插件找到了却因 GL 驱动、Wayland 协议版本或 EGL 初始化失败而静默退出 —— 务必先用 QT_DEBUG_PLUGINS=1 看日志里卡在哪一行,再决定是调环境变量、换插件,还是补系统库。

















