Как вы извлекаете библиотечные зависимости двоичного файла, который вы хотите упаковать с помощью snapcraft

#linux #snapcraft

#linux #snapcraft

Вопрос:

Я тестирую новый инструмент для упаковки Linuxhttp://snapcraft.io/create

В нем есть некоторая документация, но она не очень зрелая и содержит не все.

Что я пытаюсь сделать, так это сгенерировать пакет для моего двоичного файла, который скомпилирован с использованием Qt Framework, таким образом, это зависит от загрузки файлов .so. Я не смог найти в документации никакого способа убедить snapcraft извлечь все эти зависимости и добавить их в иерархию программы (смонтированный squashfs).

Итак, чтобы «временно исправить это», я взломал очень неудачный скрипт оболочки, который выполняет ldd в моем двоичном файле и делает это самостоятельно. Это «вроде» работает, потому что теперь действительно все необходимые библиотеки есть в изображении, но программа не может их найти, потому что большинство из них имеют собственные пути и не находятся в корневой папке lib /usr/lib

Пример ошибки, которую я получаю при попытке запустить свою программу, таков:

 /snap/huggle/x1/usr/bin/huggle: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
  

Но библиотека есть:

 /snap/huggle/x1/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
  

Он просто понятия не имеет, как его найти. С другой стороны, учитывая, что snapcraft рекламируется как потрясающий простой инструмент для упаковки, я нахожу довольно странным, что такая простая вещь, как упаковка двоичного файла C , может быть настолько сложной. Как я должен сделать это правильно?

Комментарии:

1. Если необходимыми библиотеками являются пакеты .deb, Snapcraft может загрузить их с помощью stage-packages , см.: snapcraft.io/docs/reference/plugins/common