【问题标题】:How to package Qt5 application with snapcraft如何使用 snapcraft 打包 Qt5 应用程序
【发布时间】:2018-09-10 07:00:25
【问题描述】:

我正在尝试创建Qt/QML application 的快照包,该应用程序已打包好,当我尝试运行它时出现/snap/swipe-app/x2/bin/qt5-launch: 74: exec: application: not found 错误。

这是我的 snapcraft.yaml 文件

name: swipe-app # you probably want to 'snapcraft register <name>'
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: description
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict # use 'strict' once you have the right plugs and slots

apps:
  swipe-app:
    command: qt5-launch application
    plugs:
      - unity7
      - home

parts:
  application:
     # See 'snapcraft plugins'
    plugin: qmake
    project-files: ["snap.pro"]
    source: .
    build-packages:
      - qtbase5-dev
    stage-packages:
      # Here for the plugins-- they're not linked in automatically.
      - libqt5gui5
           after: [qt5conf] # A wiki part

【问题讨论】:

  • 根据我的经验,运行时需要的不仅仅是一个 Qt 库。您是否尝试过在可执行文件上运行“ldd”?

标签: qt qml qmake snapcraft


【解决方案1】:

正如您告诉启动脚本,您的程序被称为application,那么当您运行快照时,它将尝试从当前工作目录执行application。这里有两点需要注意:

工作目录保存在终端外部快照上下文中。例如,如果您在主目录 /home/your-user 中,那么 swipe-app 的工作目录也将是 /home/your-user

由于上面的工作目录是您的主目录,因此没有任何锚点的命令,例如application,将尝试在您的主目录中执行。因此,在您的示例中,启动脚本将尝试运行相当于 /home/your-user/application 的命令。

您可以通过确保启动脚本执行cd 来更改工作目录来解决此问题,例如cd $SNAP;或通过添加锚来锚定您的命令,例如command: qt5-launch $SNAP/application.

您可能需要检查的另一件事是您的qmake 构建实际上输出了一个名为application 的二进制文件。如果您没有在 snap.pro 项目文件中设置 TARGET=,那么二进制文件将默认称为 snap application。该行应读取TARGET=application 以生成名为application 的二进制文件:(参考:https://doc.qt.io/qt-5/qmake-variable-reference.html#target)。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2019-11-04
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多