不小心重写了 LD_LIBRARY_PATH

不小心重写了 LD_LIBRARY_PATH

我在 WSL2 上运行 Ubuntu 20.04,对 bash 语法有点陌生。

当遵循一组 CUDA 安装说明时,我覆盖了 LD_LIBRARY_PATH,该说明指定更新如下:

$ export LD_LIBRARY_PATH=/usr/local/cuda-11.5/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

值 LD_LIBRARY_PATH 现在只包含指定的路径 /usr/local/cuda-11.5/lib64\ 而没有其他路径,所以我想知道我是否不小心覆盖了旧路径(因为中间的回车符?)而不是附加到它。

有两种可能:

  1. 该路径一开始是空的,因此没有覆盖任何内容,也不需要执行任何操作。这个答案似乎表明它最初是空的,但strings /etc/ld.so.cache按照评论之一的建议运行会返回一个长列表。
  2. 该路径不为空,在这种情况下我想恢复它。

答案1

您链接到的答案是正确的。正如它所说,ld使用缓存来跟踪已安装的库。

正如答案继续解释的那样,默认情况下为空,并且只是查找库的LD_LIBRARY_PATH方式的一部分。ld

LD_LIBRARY_PATH对于以下情况非常有用,例如当您需要覆盖ld选择的库或该库甚至不在缓存中时(例如,如果您正在开发共享库但尚未安装它并更新缓存)。另外,正如评论中已经提到的,此环境变量的格式很重要,您应该小心不要引入任何意外的字符。

虽然默认安装未设置LD_LIBRARY_PATH,但您可能已在 shell 启动脚本中设置了它,在这种情况下,您可以重新获取该脚本的源代码(如果您覆盖而不修改路径)或只是启动一个新的 shell 。如果默认情况下您没有对变量执行任何操作,那么一个简单的unset LD_LIBRARY_PATH操作就可以了。

LD_LIBRARY_PATH最后, 的空返回和非空返回之间不存在冲突strings /etc/ld.so.cache

答案2

您可以(大多数时候)使用以下命令获取 Linux 上环境变量的原始值:

grep -z ^LD_LIBRARY_PATH= /proc/$$/environ | tr '\0' '\n'

根据需要替换$$为 shell 之外的其他 pid 以及LD_LIBRARY_PATH其他环境变量。

该过程当然可以直接覆盖它;但ENVVAR=fooshell 和setenv(3)C 库中的 都只是在其他地方分配了一个新字符串。


在常规系统上,LD_LIBRARY_PATH应该是空的,并且只能由包装脚本和类似脚本来设置。

相关内容