怎么让编译环境找到存在的文件--linux环境变量---小白入门知识汇总2
在昇腾样例编译中,经常会碰到找不到xxx文件的情况,如果确定这些工具已经安装,那么大概率和环境变量有关,这篇博客将会讲一下关于环境变量的一些事情 。
所谓环境变量,就是一系列系统预先定义的变量,比如库文件路径,搜索路径等。比如 $PATH变量,规定了计算机搜索可执行文件的目录,我有个可执行文件叫做buildfs_st,放在/home/red_fish/tools/bin下,我只要把/home/red_fish/tools/bin加入环境变量$PATH,则在任何目录下,当我输入buildfs_st,都可以直接执行该可执行文件。当然,如果不加入也可以执行,就需要打全目录/home/red_fish/tools/bin/buildfs_st。这个小技巧在遇到一部分编译问题的时候很有用,比如之前碰到在编译到最后一步ld(链接形成最后文件)的时候,如果报错找不到 xxx文件或者库,我们可以选择三种方式:
1.找到编译配置问题,重新构建编译文件(可能导致工程重新编译,如果编译内容复杂,耗时较高)
2.把这些库和文件都加入到环境变量,重新编译一次(临时措施,可能导致无法迁移到其他设备编译,可能导致工具版本错乱,例如把不同版本的目录也引入了PATH)
3.复制最后一个命令的全部,然后把找不到的文件补成全路径(临时措施,需要每次单独操作一下,麻烦,可能会漏掉一些编译脚本里的信息,导致无法编译,只是一种选择)
-
操作指令 export
最核心的环境 变量操作命令是
语法
export [-fnp][变量名称]=[变量设置值]
参数说明:
- -f 指示[变量名称]中为函数名称。
- -n 删除指定的变量。(临时禁用指定变量,本shell有效)
- -p 列出所有的shell赋予程序的环境变量。
典型环境中的变量如下:
对我们比较关键的是:PATH和LD_LIBRARY_PATH,PATH是可执行文件的位置,比如gcc、cmake等,当报错一个命令找不到的时候,可以输入这个命令的前几个字母,比如gc,然后快速按两下tab
如果能够补全看到,就是已经在环境变量覆盖里了,如果还 报找不到,需要考虑版本问题(比如实际找到的是一个arm可执行文件但是我们平台是x86的),注意不同用户的环境变量是可以不一样的,比如在HwHiAiUser下安装了tools,但是在root下,就有可能找不到,需要再添加一次。
-
临时添加环境变量
在某些操作中,我不需要环境变量总是生效,这时,我们可以选择临时添加一下路径。
临时添加环境变量的命令也是export 比如我要/home/red_fish/tools/bin下的buildfs_st可以被其他位置直接调用,则可以
export PATH=$PATH:/home/red_fish/tools/bin
可以看到,这个路径已经加入到PATH中了。
注意,在 修改PATH过程中,语法是PATH=$PATH:“/要增加的路径”
这是要继承原有的路径,否则你直接等于的话,buildfs_st是找到了,其他指令找不到了,你就只能关掉这个shell,重新开一个了。如果添加多个路径,路径间用冒号隔开,如果有空格路径可以用双引号封一下。
-
永久添加环境变量
有时候我们需要环境变量一直生效,这时候我们一般会把环境变量 配置指令放在脚本里。如果这个变量希望对所有人生效,一般会放在/etc/profile里,如果这个变量希望只对当前用户生效,则可以放在~/.bashrc中(~可以直接用在命令里,表示当前用户的home目录,对于HwHiAiUser,就是/home/HwHiAiUser,对于root,就是/root或者/home/root)
编辑然后放在文档最后面:
或者放到sh脚本中,然后使用source引入,sh脚本里也是一堆的export
为啥直接输入的时候是export,如果放在可执行文件就要用source?我们来看一下help
source用单条执行命令的方式来执行文件,为啥要这么麻烦呢?因为linux在执行可执行文件的时候,会先fork一个bash的副本,然后在副本中进行执行,当执行完毕后,副本就销毁了。如果你直接执行脚本,脚本里的变量对脚本里的命令是有效的,当脚本执行完,副本销毁,就失效了,所以必须使用source的方式。
在修改完环境变量后,也要用source方式执行一下,才能对于当前窗口生效
source /etc/profile
source ~/.bashrc
对于新开窗口,会自动执行这两个语句,所以不管就可以了。
如果要查阅指定的环境变量,可以用echo
-
sudo和su的情况
sudo提升权限,可以让普通用户获得更高权限用户的权限,但是环境变量依旧继承原有用户的shell。使用su切换用户,权限和环境变量都切换为新用户的。
- 点赞
- 收藏
- 关注作者
评论(0)