gpt4 book ai didi

Snapcraft 自定义 LD_LIBRARY_PATH

转载 作者:行者123 更新时间:2023-12-02 23:46:06 26 4
gpt4 key购买 nike

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

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

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

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

最佳答案

Snapcraft 维护一个常见库路径列表(例如 /usr/lib//usr/lib/<arch> 等)。如果这些目录存在,它会将它们添加到 LD_LIBRARY_PATH 。想想 Ubuntu 如何在您提到的这种不可预测的路径中“查找”库:这是 /etc/ld.so.conf 背后的原因之一。然而,软件包向 Ubuntu 通知新库的典型方式是在安装 Debian 软件包后运行的 Hook 中。就 Snapcraft 而言,这些钩子(Hook)永远不会运行——阶段包只是简单地解压。这意味着 Snapcraft 没有简单的方法来了解它刚刚解压的阶段包在不可预测的位置有一个库。

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

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

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

关于Snapcraft 自定义 LD_LIBRARY_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42991501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com