带有 QT4 应用程序的 Snap 包找不到 sql 数据库驱动程序

带有 QT4 应用程序的 Snap 包找不到 sql 数据库驱动程序

我尝试为使用 QT4 和 sqLite 的开源项目构建 snapcraft 文件。经过几次迭代后,构建工作顺利进行,但现在我无法启动该程序。似乎有两个问题:

我重点关注后者:

QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers: 
Cannot open DB

我看到文件libqsqlite.so在 snap 中。似乎数据库驱动程序路径被硬编码到/usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers/,位于预构建的 QT 库中的某个位置,但 snap 中的所有文件都已安装到/snap/beurerscalemanager/current/,因此我需要以某种方式重定向它。最明显的是设置 LD_LIBRARY_PATH,但仍然找不到库。我还找到了有关 的信息/qt/etc/qt.conf,但这看起来又像是一个绝对路径,我无法从 snap 内部影响它。

修复此问题的正确方法是什么?

这是我的snapcraft.yaml

name: beurerscalemanager
version: git
title: Beurer Scale Manager
summary: Beurer Scale Manager
description: |
    This project would be a Linux replacement for the Beurer HealthManager (Windows).
grade: devel
license: GPL-3.0

confinement: strict
#confinement: devmode
base: core18

apps:
  beurerscalemanager:
    command: "BeurerScaleManager"
    plugs:
    - hardware-observe
    - raw-usb
    - x11
    #- home
    #environment:
    #  "LD_LIBRARY_PATH": "$SNAP/usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers"

parts:
  beurerscalemanager:
    plugin: cmake
    source-type: git
    source: https://github.com/Urban82/BeurerScaleManager.git
    build-packages:
      - libusb-1.0-0-dev
      - pkg-config
      - libqt4-dev
    stage-packages:
      - libusb-1.0-0
      - libqt4-sql
      - libqt4-sql-sqlite
      - libsqlite3-0
      - libqtcore4
      - libqtgui4

答案1

我能够使用环境变量设置插件路径,该变量位于Qt4 文档

    environment:
      QT_PLUGIN_PATH: "$SNAP/usr/lib/x86_64-linux-gnu/qt4/plugins/"

路径的硬编码架构部分不太好。但这似乎是 中的环境变量的一个常见问题snapcraft.yaml。我期望类似$SNAP_ARCH但其中包含字符串amd64

相关内容