我在 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\ 而没有其他路径,所以我想知道我是否不小心覆盖了旧路径(因为中间的回车符?)而不是附加到它。
有两种可能:
- 该路径一开始是空的,因此没有覆盖任何内容,也不需要执行任何操作。这个答案似乎表明它最初是空的,但
strings /etc/ld.so.cache
按照评论之一的建议运行会返回一个长列表。 - 该路径不为空,在这种情况下我想恢复它。
答案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=foo
shell 和setenv(3)
C 库中的 都只是在其他地方分配了一个新字符串。
在常规系统上,LD_LIBRARY_PATH
应该是空的,并且只能由包装脚本和类似脚本来设置。