![带有 QT4 应用程序的 Snap 包找不到 sql 数据库驱动程序](https://linux22.com/image/1170349/%E5%B8%A6%E6%9C%89%20QT4%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%20Snap%20%E5%8C%85%E6%89%BE%E4%B8%8D%E5%88%B0%20sql%20%E6%95%B0%E6%8D%AE%E5%BA%93%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F.png)
我尝试为使用 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