使用 snap 安装共享库

Install shared library using snap

本文关键字:共享 安装 snap 使用      更新时间:2023-10-16

我有项目,由cmake构建,我想要带有snap的包。项目包括可执行文件和库(我们称之为aliba(。

我的snapcraft.yaml文件看起来像:

name: a
version: "0.9"
summary: xyz
description: xyz
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict
apps:
a:
command: a
parts:
a:
plugin: cmake
source: ./a.zip
filesets:
manpages: [ usr/share/man ]

在 CMake 中,a 依赖于 liba(实际上a只是liba的"包装器">,用于 bash 脚本(。当我使用 Snapcraft 构建项目并安装该包(安装 --dangerous(时,从终端运行命令a工作正常。但是当我尝试构建依赖于liba的应用程序(使用gcc(时,我遇到了以"/usr/bin/x86_64-linux-gnu-ld:找不到-la"错误消息结尾的问题。首先,我必须包含标头,即使它们已使用">-I/snap/a/current..."安装到系统默认包含目录中(我知道snap将文件安装到/snap/目录中,但也许我只是在snapcraft.yaml上做错了什么(。然后我收到上面ld的消息。

我是快照包的新手,这是我的第一个项目。是否可以将liba安装为系统库(使用gcc构建时可见,使用系统默认目录中的包含(?

也许它有助于将a和 liba 拆分为依赖于liba构建的不同包,但我不确定它是否有助于解决共享库安装问题。

你对这个问题有一些经验吗?有什么建议吗?感谢您的回答。

恐怕快照并不适合您要做的事情。它们非常适合最终用户应用程序(例如,使库在脚本中有用的包装器(,但根据设计,它们与系统的其余部分隔离。可以在其中提供库以供其他应用程序使用,但这些应用程序需要在/snap/<snap name>/current/的某个地方查找库和标头,这绝对不在默认搜索路径上。

请注意,您可以通过内容界面通过快照传送库,以便在其他快照中使用。不过,如果可以的话,我建议避免它;根据我的经验,它非常复杂和脆弱。