【问题标题】:Snapcraft custom LD_LIBRARY_PATHSnapcraft 自定义 LD_LIBRARY_PATH
【发布时间】:2017-08-16 22:04:23
【问题描述】:

在构建 snap 包时,包装脚本会自动将 $SNAP/usr/lib 添加到 LD_LIBRARY_PATH

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

虽然所有依赖项都在我的 snapcraft.yaml 中的stage-packages 下定义,但上述路径并未包含在包装脚本中。

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

【问题讨论】:

    标签: snapcraft


    【解决方案1】:

    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. 利用 new 和 as yet undocumented environment 关键字,像这样:

      apps:
        my-app:
          command: my-binary
          environment:
            LD_LIBRARY_PATH: $LD_LIBRARY_PATH:$SNAP/usr/lib/lapack
      

    【讨论】:

    • environment 关键字似乎是目前要走的路,谢谢@Kyle
    猜你喜欢
    • 2021-08-08
    • 2017-09-08
    • 1970-01-01
    • 2023-02-06
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多