Я пытаюсь создать snapcraft файл для проекта с открытым исходным кодом, который использует QT4 и sqLite. Здание хорошо работало после немногих повторений, но теперь, я не могу запустить программу. Кажется, существует две проблемы:
Я фокусируюсь на последнем:
QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers:
Cannot open DB
Я вижу что файл libqsqlite.so
находится в снимке. Кажется, что путь драйвера базы данных является hardcoded к /usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers/
, где-нибудь в предварительно созданных библиотеках QT, но всех файлах в снимке смонтированы к /snap/beurerscalemanager/current/
, таким образом, я должен перенаправить это так или иначе. Самый очевидный должен был установить LD_LIBRARY_PATH, но библиотека все еще не была найдена. Я также нашел информацию о a /qt/etc/qt.conf
, но это снова походит на полный путь, на который я не могу влиять из снимка.
Что надлежащий путь состоит в том, чтобы зафиксировать это?
Вот мой 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
Я смог установить сменный путь с помощью переменной среды, найденной глубоко в документации Qt4:
environment:
QT_PLUGIN_PATH: "$SNAP/usr/lib/x86_64-linux-gnu/qt4/plugins/"
Не хороший трудно кодированная часть архитектуры пути. Но кажется, что это - типичная проблема на envvars в snapcraft.yaml
. Я ожидал бы что-то как $SNAP_ARCH
но что каждый содержит строку amd64