1. 解决方法
将管理员user账户中的CUDA/ Anaconda安装环境添加到新用户的环境变量中。
i. vim ~/.bashrc
ii. # 添加user账户中的CUDA/ Anaconda的环境变量path
iii. source ~/.bashrc
去user账户下的bashrc文件中,找到CUDA和Anaconda的环境变量path
将这三行命令复制到新用户的.bashrc文件中
export PATH=$PATH:/usr/local/cuda-10.0/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-10.0/lib64
export PATH=/home/user/anaconda3/bin:$PATH
验证是否成功?
2. 什么是.bashrc
什么是 .bashrc,为什么要编辑 .bashrc? | Linux 中国 - Linux中国的文章 - 知乎
https://zhuanlan.zhihu.com/p/33546077
为了加载个人的配置,bash每次启动都会加载.bashrc文件的内容,每个用户的home目录下都有这个shell脚本。他是用来存储并加载个人的终端配置和环境变量。
3. LD_LIBRARY_PATH 用法
LD_LIBRARY_PATH 是 Linux 环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。
也就是当执行函数动态链接.so文件时,如果不在默认路径 'lib' 或者 '/usr/lib',那么就需要指定环境变量LD_LIBRARY_PATH。
假如现在需要在已有的环境变量上添加新的路径名,则采用如下方式:
LD_LIBRARY_PATH = NewDirs:$LD_LIBRARY_PATH
实例如下:
export LD_LIBRARY_PATH = /export/apps/anaconda2/2.4.1/lib/:$LD_LIBRARY_PATH
为什么修改LD_LIBRARY_PATH呢?
因为程序运行时,动态库的搜索路径的先后顺序为:
① 编译目标代码时指定的动态库搜索路径;
② 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
③ 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
④ 默认的动态库搜索路径/lib 和 /usr/lib 。
这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib 和 /usr/lib 只有 root 权限才可以修改,而且配置文件 /etc/ld.so.conf 也是 root 的事情,我们只好对 LD_LIBRARY_PATH 进行操作。
上面的 export LD_LIBRARY_PATH 是临时设置环境变量,重启或者打开新的shell之后,所有设置都会消失,所以需要写进 .bashrc 文件中。
4. Linux中 PATH、LIBRARY_PATH、LD_LIBRARY_PATH 的区别
① PATH
目的:在任意目录下都可以运行bin文件夹中的二进制文件、shell脚本等可执行文件。
配置方法:只需要把bin的路径添加到PATH中即可
vim ~/.bashrc
PATH = $PATH:~/bin
是可执行文件路径,是三个中我们最常接触到的,因为我们命令行中的每句能运行的命令,如ls、top、ps等,都是系统通过PATH 找到了这个命令执行文件的所在位置,再run 这个命令(可执行文件)
所以anaconda和CUDA都要在新用户的bashrc中设置 PATH。
执行echo $PATH
能看到当前环境的PATH都配置哪些路径。
② LIBRARY_PATH 和 LD_LIBRARY_PATH
- LIBRARY_PATH是程序编译期间查找动态链接库时指定的查找共享库的路径;
- LD_LIBRARY_PATH 是程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径。
两者的共同点是库,库是这两个路径和PATH路径的区别,PATH是可执行程序。
两者的差异点是使用时间不一样。一个是编译器,对应的是开发阶段,如gcc编译;一个是加载运行期,对应点是程序已交付的使用阶段。
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:XXXX