1

我有项目,它是由cmake构建的,我想要使用snap包。项目包括可执行文件和库(我们称之为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的“包装器”,用于 bash 脚本)。当我使用 Snapcraft 构建项目并安装该软件包(安装为--dangerous )时,从终端运行命令a工作正常。但是当我尝试构建依赖于liba的应用程序(使用gcc)时,我遇到了以“ /usr/bin/x86_64-linux-gnu-ld: cannot find -la ”错误消息结尾的问题。首先,即使它们已使用“ -I/snap/a/current... ”安装到系统默认包含目录中,我也必须包含标题。"(我知道 snap 安装文件到/snap/目录,但也许我只是对 snapcraft.yaml 做错了)。然后我从上面的ld收到消息。

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

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

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

4

1 回答 1

3

恐怕快照不太适合您尝试做的事情。它们非常适合最终用户应用程序(例如,使 lib 在脚本中有用的包装器),但在设计上它们与系统的其余部分隔离。可以在其中提供库以供其他应用程序使用,但这些应用程序需要在/snap/<snap name>/current/.

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

于 2018-08-28T15:49:57.860 回答