如何用snapcraft打包Qt5应用及启动报错问题排查
解决Qt/QML Snap包运行时"application: not found"错误
嘿,这个错误我之前帮别人排查过好几次,本质就是snap里的qt5-launch脚本找不到你要启动的应用可执行文件,大概率是你的snapcraft.yaml配置出了小问题,咱们一步步来搞定它:
1. 先把command字段的占位符换掉
看你的错误提示里exec: application: not found,说明你可能直接用了默认的command: qt5-launch application,这里的application是占位符啊!你得换成自己应用实际的可执行文件名。
比如如果你的应用编译后生成的可执行文件叫swipe-app(和你的snap名字一致),那command应该写成:
command: qt5-launch $SNAP/bin/swipe-app
要是你的可执行文件在/usr/bin目录下,就改成$SNAP/usr/bin/swipe-app,总之路径要和实际打包后的位置对应上。
2. 确认Parts配置把可执行文件打包进去了
你的snapcraft.yaml的parts部分得确保编译后的可执行文件被正确复制到snap里。比如用qmake插件的话,加上override-build指定安装路径:
parts: swipe-app: source: . plugin: qmake override-build: | qmake make make install DESTDIR=$SNAPCRAFT_PART_INSTALL
这样编译出来的文件会被放到snap的对应目录,qt5-launch才能找到它。
3. 手动验证可执行文件是否在Snap里
要是还是不确定,你可以挂载snap包看看内部结构:
sudo mount -o ro,loop /var/lib/snapd/snaps/swipe-app_x2.snap /mnt ls /mnt/bin/ # 或者你认为的可执行文件所在路径 sudo umount /mnt
如果这里找不到你的可执行文件,那就是打包时没把它加进去,得调整parts的配置。
4. 别忘了补全Qt依赖
有时候Qt应用缺了QML模块之类的依赖,也会间接导致启动失败。可以在parts里加上必要的stage-packages:
parts: swipe-app: # ...其他配置 stage-packages: - qt5-qml-modules - qt5-default
调整完这些之后,先清理旧的构建文件snapcraft clean,然后重新打包snapcraft,安装后应该就能正常运行了!
内容的提问来源于stack exchange,提问作者Junius L
相关产品推荐
相关产品推荐

