5

构建 snap 包时,包装脚本会自动添加$SNAP/usr/libLD_LIBRARY_PATH.

在 docker 上构建我的包时,一些库(在本例中为liblapacklibblas)分别安装在子目录中:$SNAP/usr/lib/lapack$SNAP/usr/lib/libblas

尽管所有依赖项都stage-packages在我的 snapcraft.yaml 中定义,但上面的路径不包含在包装脚本中。

如何强制 snapcraft 自动将所有库的路径添加到包装脚本?

4

1 回答 1

7

Snapcraft 维护一个常用库路径的列表(例如/usr/lib//usr/lib/<arch>等)。如果这些目录存在,它会将它们添加到LD_LIBRARY_PATH. 想想 Ubuntu 如何在您提到的这种不可预测的路径中“找到”库:这是/etc/ld.so.conf. 但是,包通知 Ubuntu 新库的典型方式是在安装 Debian 包后运行的挂钩中。在 Snapcraft 的情况下,这些钩子永远不会运行——stage-packages 只是简单地解包。这意味着 Snapcraft 无法轻松得知它刚刚解压的 stage-package 在一个不可预测的地方有一个库。

虽然 Snapcraft 目前无法自动为您提供帮助,但您绝对可以使用以下两种方式之一自行完成:

  1. 创建一个包装脚本,设置LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SNAP/usr/lib/lapack然后执行您实际要运行的二进制文件。apps然后在您的部分中使用该包装脚本。
  2. 使用新的尚未记录 environment的关键字,如下所示:

    apps:
      my-app:
        command: my-binary
        environment:
          LD_LIBRARY_PATH: $LD_LIBRARY_PATH:$SNAP/usr/lib/lapack
    
于 2017-03-24T15:33:43.320 回答