如何解决Qt应用在Wayland环境下无法启动的问题?
解决Qt Wayland平台插件缺失及编译依赖问题
看起来你在Fedora 28上折腾Qt Wayland的过程中踩了好几个坑——从平台插件找不到,到编译QtWayland时依赖检测失败,再到后来CMake找不到Qt头文件。我来一步步帮你理清思路,解决这些问题:
一、先搞定Wayland平台插件缺失的基础问题
你最初运行./myapp -platform wayland时报错找不到插件,核心原因要么是系统Wayland依赖没装全,要么是Qt插件路径不对,或者插件版本不兼容:
- 先补全Wayland开发依赖:Fedora 28里
dnf whatprovides *wayland*没结果是因为包名匹配问题,直接安装完整的开发包:sudo dnf install wayland-devel wayland-egl-devel libxkbcommon-devel mesa-libEGL-devel mesa-libGLES-devel - 检查系统Qt插件路径:如果你用包管理装了
qt5-qtwayland,Wayland插件应该在/usr/lib64/qt5/plugins/platforms/(64位系统),用下面的命令确认是否存在:ls /usr/lib64/qt5/plugins/platforms/libqwayland*.so - 别手动复制
libwayland-egl.so!不同版本的Qt二进制兼容性很差,复制系统so到官方Qt插件目录只会导致加载失败,必须用对应Qt版本编译的插件才行。
二、针对官方Qt二进制包编译QtWayland的正确姿势
你之前编译QtWayland时qmake显示未启用Client和Compositor,是因为没指定官方Qt的qmake路径,或者依赖没装全:
- 下载和你官方Qt版本(比如5.11rc)匹配的QtWayland源码;
- 切换到QtWayland源码目录,用官方Qt的qmake来配置(别用系统qmake):
这时候检查输出,应该会看到cd qtwayland ~/Qt/5.11.0-rc/gcc_64/bin/qmakeQt Wayland Client和Qt Wayland Compositor都显示为yes,如果还是不行,再确认一遍前面的依赖有没有装全; - 编译并安装,插件会自动放到官方Qt的插件目录:
make -j$(nproc) sudo make install
三、解决CMake找不到Qt头文件的问题
安装Qt5.11rc后CMake找不到头文件,是因为CMake没识别到你的官方Qt路径:
- 方法一:运行cmake时指定Qt前缀路径:
cmake -DCMAKE_PREFIX_PATH=~/Qt/5.11.0-rc/gcc_64/ .. - 方法二:在你的CMakeLists.txt开头添加路径配置:
set(CMAKE_PREFIX_PATH "~/Qt/5.11.0-rc/gcc_64/") find_package(Qt5 REQUIRED COMPONENTS Core Widgets) # 根据你的项目需求添加组件 - 额外检查:确认官方Qt包的
include/目录下有Qt头文件,比如~/Qt/5.11.0-rc/gcc_64/include/QtCore/,如果缺失,说明你安装Qt时没选全组件,重新运行Qt安装程序补装即可。
额外排查小技巧
- 检查Wayland会话:运行
echo $XDG_SESSION_TYPE,如果输出不是wayland,说明当前是X11会话,登录时可以选择GNOME on Wayland再测试; - 清理环境变量:如果设置过
QT_QPA_PLATFORM_PLUGIN_PATH,可能会覆盖默认插件路径,用unset QT_QPA_PLATFORM_PLUGIN_PATH取消后再测试; - 核心转储分析:如果还是崩溃,用
gdb ./myapp core加载核心转储,查看插件加载时的具体错误信息,能更快定位问题。
内容的提问来源于stack exchange,提问作者myk




