使用 snap 安装共享库

Install shared library using snap

我有一个项目,它是由 cmake 构建的,我想要用 snap 打包。项目包括可执行文件和库(让我们调用 it a 和 liba)。

我的 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 的 69=] 用于 bash 脚本)。当我使用 Snapcraft 构建项目并安装该包时(安装为 --dangerous),终端中的 运行 命令 a 工作正常。但是当我尝试构建依赖于 liba 的应用程序时(使用 gcc),我遇到了以“[=70”结尾的问题=]:找不到 -la”错误消息。首先,我必须包含 headers,即使它们已经安装到系统默认的 include 目录中,使用“-I/snap/a/current..."(我知道 snap 安装文件到 /snap/ 目录,但也许我只是在 snapcraft.yaml 上做错了)。然后我从上面的 ld 收到消息。

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

也许这有助于将 aliba 分成不同的包 a [= liba 上的 72=],但我不确定它是否有助于解决共享库安装问题。

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

恐怕快照并不是真正 well-suited 您想要做的事情。它们非常适合 end-user 应用程序(例如,使 lib 在脚本中有用的包装器),但在设计上它们与系统的其余部分隔离。可以在其中运送库以供其他应用程序使用,但这些应用程序需要在 /snap/<snap name>/current/ 中的某处查找库和 headers,这绝对不在默认搜索路径上。

请注意,您可以通过 snap 发送库,以便通过 content interface其他 snaps 中使用。不过,我建议尽可能避免使用它;根据我的经验,它非常复杂和脆弱。