【问题标题】:fish shell seems to be ignoring LD_LIBRARY_PATH?鱼壳似乎忽略了 LD_LIBRARY_PATH?
【发布时间】:2019-08-14 21:09:55
【问题描述】:

在启动darknet 之前,我需要为CUDA 设置LD_LIBRARY_PATH。看起来像这样:

echo $LD_LIBRARY_PATH
/usr/local/cuda/lib64

当应用程序启动时,它无法加载它应该在该目录中找到的库:

./darknet 
./darknet: error while loading shared libraries: libcudart.so.10.0:
cannot open shared object file: No such file or directory

但库肯定在那个目录中:

ldd /usr/local/cuda/lib64/libcudart.so.10.0
    linux-vdso.so.1 =>  (0x00007ffe7bf2d000)
    ...etc...

我假设我没有在 fish 中正确设置 LD_LIBRARY_PATH。这就是我最初在鱼中的做法:

set -U LD_LIBRARY_PATH /usr/local/cuda/lib64
echo $LD_LIBRARY_PATH
/usr/local/cuda/lib64

当我在 bash 中尝试完全相同的事情时,它工作正常

bash
export LD_LIBRARY_PATH=/usr/local/cuda/lib64
./darknet 
usage: ./darknet <function>

所有这些都在运行 fish 2.2.0 和 bash 4.3.48 的 64 位 Ubuntu 16.04.6 上。

【问题讨论】:

    标签: shell ubuntu fish


    【解决方案1】:

    您没有导出变量。相反,这样做:

    set -Ux LD_LIBRARY_PATH /usr/local/cuda/lib64
    ./darknet 
    

    【讨论】:

    • 在鱼教程中很容易错过。谢谢。
    • 你真的不想导出通用变量。这样做往往会导致比解决的问题更多的问题。只需 set -x 即可在您的 config.fish 中使用。
    • 当然。这可以很容易地用set -Gx LD_LIBRARY_PATH /usr/local/cuda/lib64 设置。我使用的是fish 3.0,还没有发现导出的通用变量有任何问题(但我没有很多)。
    猜你喜欢
    • 2021-10-28
    • 2016-09-30
    • 2016-03-16
    • 2014-02-03
    • 2012-03-11
    • 2013-09-07
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多