我尝试为使用 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