昨晚有北理工的同学问我:“我的工具链已经安装好了,为啥我的工具链编译不了程序呢”:
我看了一下他发给我的截图,他的问题情况大概是这样的:
大家可以看到linux环境变量,Linux系统报错:arm-linux-gcc: not found,很明显是说没有找到arm-linux-gcc这个命令。嗯?明明已经安装了呀,之前都可以用的,怎么现在就说没找到的呢?同学的心已经奔溃了,有木有啊!
当我们遇到问题时:大家一定要冷静下来细心想想,在我们安装完工具链后,我们做了一件事情,那就是设置工具链到Linux系统中的环境变量PATH中,这样我们才能在任意的目录下正常使用工具链,现在报错工具链用不了,很有可能就是工具链的环境变量出错了,我们可以输入env命令来查看环境变量:
root@:/mnt/hgfs/# env
我们可以看到ROOT身份的PATH变量:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
看到这里,同学心里又开始奔溃了,之前我的工具链是安装在“/usr/local/arm/5.4.0/usr/bin”下的,并且已经设置该路径到PATH下了,怎么现在查看又不见了呢?(如果你最近才关注我的公众号:请看历史消息中:“Linux环境变量:教你如何配置交叉工具链”这篇文章)
其实是这样的,你的环境变量PATH并没有丢失你的工具链路径,但是我们看看,在刚才的例子中,我们的身份是root,是超级用户身份:
但是,大家还记得,之前我们在配置工具链环境变量的时候,我们是在普通用户下添加设置的,我们瞬间就想到一个问题:是不是超级用户的环境变量与普通用户的环境变量不一样呢?好的,我们切换回普通用户再查看环境变量:
@:/mnt/hgfs/$ env
我们可以看到身份PATH变量:
PATH=/usr/local/arm/5.4.0/usr/bin:/home//bin:/home//.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
很明显linux环境变量,我们可以看到,我们熟悉的“/usr/local/arm/5.4.0/usr/bin”的确在这里,问题已经解决了,原来编译不了程序,原因就是在ROOT身份下的环境变量没有了这个工具链的路径。
在上述例子中,想要编译成功,总结两种情况如下:
1)如果之前在普通用户身份设置了环境变量,则切换回普通身份就可以编译成功:
2)如果一定要在超级用户下编译,则必须添加工具链所在的路径“/usr/local/arm/5.4.0/usr/bin”到超级用户的环境变量PATH中,再编译,就可以成功:
结论:普通用户与超级用户的环境变量是不一样!
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh