使用快照安装共享库

时间:2018-08-28 15:37:20

标签: c++ cmake install shared-libraries snapcraft

我有一个项目,该项目是由 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 的“包装器”在bash脚本中使用)。当我使用Snapcraft构建项目并安装该软件包(安装为-dangerous )时,从终端运行命令 a 可以正常工作。但是,当我尝试构建依赖于 liba 的应用程序(使用 gcc )时,出现了以“ / usr / bin / x86_64-linux-gnu- ld:找不到-la ”错误消息。首先,即使使用“ -I / snap / a / current ... ”将头文件安装到系统默认的 include 目录中,我也必须包含头文件(我理解会将安装文件快速安装到 / snap / 目录中,但也许我只是对snapcraft.yaml做错了。然后我从上方的 ld 收到消息。

我是snap包的全新用户,这是我的第一个项目。

是否可以将 liba 安装为系统库(在使用gcc构建时可见,使用系统默认目录中的includes)?

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

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

1 个答案:

答案 0 :(得分:0)

恐怕快照并不十分适合您要尝试执行的操作。它们非常适合最终用户应用程序(例如,使lib在脚本中有用的包装器),但是通过设计,它们与系统的其余部分是隔离的。可以在其中运送库以供其他应用程序使用,但是这些应用程序将需要在/snap/<snap name>/current/中的某个位置查找库和标头,这肯定不在默认搜索路径上。

相关问题