怎么让编译环境找到存在的文件--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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值