像我儿子一样永远保持好奇和梦想

[b][z]交叉编译中环境变量的设定:

上一篇 / 下一篇  2012-10-18 10:29:43 / 个人分类:practic_linux

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台hN"HL {F

hsy75案:在使用arm的系统时候,经常遇到的问题就是交叉编译环境的设置问题:编译的时候,经常发生编译工具的路径,选择,版本的问题导致交叉编译出错:

B'_^1Jd!w:k9C o0

\jW9h9e.RX7J I0本文从export命令出发试图从本源上解决其中的路径问题龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台"L#s\(qHw ?.f

4uq-DuL[0嵌入式项目,一般在SDK里面写一个脚本,比如sh文件,在编译项目时候,先运行这个脚本

!hsdc5pz6h9hx6H0A0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台k+D6iUw

在脚本里面用export命令设置一下PATH,这样的好处是因为SDK可能会有很多,不同的项目不同,这样做,可以保证不影响系统的PATH配置,只在做的时候需要的时候设置。

~)H8_-VIi+hG0

*| {C8ept ?0


1 export 的使用

M5i]M{wGl0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9l-C%~-Mq

Z4q3Fs7fvH W0作为检查路径的引子,首先你要知道的是这个命令:

Z/z:@$Jw:B5f!q7h,^0

2ug_O_ l6Z-d7{,O0export 和他的非常重要的一个选项: -p 注意如果你不写这个选项,系统一般默认是已经选择了,也就是export 和 export -p 效果一样龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台&Kr-TH GB

6pZa6x3i X#yq0当客户重新安装了你的SDK,却出现了一些你没遇到的问题,你就需要用这个命令去仔细看一下到底哪里的配置不一样。

*\!@}@-s#X)J0

E(QpAz(l,S0正如经常遇到的,最容易出问题的就是PATH的错误。

b2B5a"Js w2ex0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台U}}#{)yBp,_sc


2 PATH 的设定龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台H(@$Z-Tt~!|X ~9N

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台3RV(sgM

在Linux里设置环境变量的方法(export PATH)


一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量
例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我嵌入式的编译工具,则有如下三种方法来设置环境变量:

1、如果仅仅是本次登录修改一下,编译一下,那么直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已经设好,可用命令export查看:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x LDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"

可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。

2、如果要对所有用户的登录都设定这个PATH,这必须修改系统profile文件: 
#vi /etc/profile 
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
hsy75案,既然是说用户的PATH值,那么显然你必须用root用户去修改


3. 如果要对你自己这个用户有效,只需要修改你的shell的默认的配置,修改.bashrc文件:
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:
# echo $PATH
看看输出里面是不是已经有了/my_new_path这个路径了。

-----------------------------------------------------------------------------------------------------------------------

7i;OS Oh(Z0

 “/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。

.Z7H&h-[{?!`'A0

  如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 “PATH=$PATH:路径”可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可 选:“/etc/profile”和用户主目录下的“.bash_profile”,“/etc/profile”对系统里所有用户都有效,用户主目录下 的“.bash_profile”只对这个用户有效。

Ko5a-mdf"S0

  “PATH=$PATH:路径1:路径2:...:路径n”,意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所 有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“$PATH”表示原先设定的路径 仍然有效,注意不要漏掉。某些软件可能还有“PATH”以外类型的环境变量需要添加,但方法与此相同,并且也需要注意“$”。

iD/Iq5~:v,B_0

  注意,与DOS/Window不同,UNIX类系统环境变量中路径名用冒号分隔,不是分号。另外,软件越装越多,环境变量越添越多,为了避免造成混乱,建议所有语句都添加在文件结尾,按软件的安装顺序添加。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台$xz[~~4iW

  格式如下():龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Q P-i H;e.dc"o

  # 软件名-版本号

1a\o$CeB:e"tnW;^a0

  PATH=$PATH:路径1:路径2:...:路径n

kJ/m@V };j0

  其他环境变量=$其他环境变量:...

jL^C ntw1x&`0

  在“profile”和“.bash_profile”中,“#”是注释符号,写在这里除了视觉分隔外没有任何效果。

aa"p&Sq1l'PM0

  设置完毕,注销并重新登录,设置就生效了。如果不注销,直接在shell里执行这些语句,也能生效,但是作用范围只限于执行了这些语句的shell。

iD&F%t3Z1d3N+j0

  相关的环境变量生效后,就不必老跑到软件的可执行文件目录里去操作了。

{e ]6G2I5Jv`0
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台mwsFG,xFh0X


 

Ep/f Ay([2wj(P q7p0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台ip!T L*e!w-s D


appendix:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 S%K*r~o bT

)F.Q;Z*x^e0

export龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台.SP.pR%N3q um-Z5xR

作者: 日期:2003-05-28 10:33:48 浏览次数:


龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台)_7q0`5h,X#f0js

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台j x xN5^

export

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台m+sG0k$X

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台Q)R.x5J4W%wG

2R+pG!|;X1Qj0

功能说明:设置或显示环境变量。
9^L9M i9SX:d"Ab0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台+n'GWd;MM
语  法:export [-fnp][变量名称]=[变量设置值]
m~"r,Q#N5xc/_0
|KSn RD0补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台cx(}JwD%b1^q"I
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台kj&Rn/l
参  数:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7o.u ^(j%O{w
 -f  代表[变量名称]中为函数名称。
Md"@~0S}?0 -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
DF-N0c^dcS0 -p  列出所有的shell赋予程序的环境变量。

$\c#MT ~:S0 龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7L)o4k ?S1lWp

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台jfH3qE8l ~x

 

C9}3v-nm Ib.G0
龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台7\ A[)Qg8x*hR

Appendix: PATH:

指的是环境变量:
dingran@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
dingran@ubuntu:~$ which ls
/bin/ls
在输入一些命令时,如果没有给出命令的路径,系统则到PATH变量指定的路径下找,按照PATH
变量里的顺序(冒号:是路径分隔符),如果想让你自己的程序运行时无需输入路径名,可以将你程序的目录添加到PATH变量中,修改如下:
用root用户进,编辑.bashrc
vi ~/.bashrc
加入
set PATH=$PATH:dir(dir为你要添加的目录)
export PATH 
保存退出 
appendix:PATH 作用:

关于PATH的作用:
PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下,事实上当你输入命令的时候LINUX会去/bin,/usr/bin,/sbin等目录下面去找你此时输入的命令,而PATH的值恰恰就是/bin:/sbin:/usr/bin:……。其中的冒号使目录与目录之间隔开。

6nv$vSU?0


关于新增自定义路径:
现在假设你新安装了一个命令在/usr/locar/new/bin下面,而你又想像ls一样在任何地方都使用这个命令,你就需要修改环境变量PATH了,准确的说就是给PATH增加一个值/usr/locar/new/bin。你只需要一行bash命令export PATH=$PATH:/usr/locar/new/bin。这条命令的意思太清楚不过了,使PATH自增:/usr/locar/new/bin,既PATH=PATH+":/usr/locar/new/bin";通常的做法是把这行bash命令写到/root/.bashrc的末尾,然后当你重新登陆LINUX的时候(应该是linux启动时就会执行这个文件),新的默认路径就添加进去了。当然这里你直接用source /root/.bashrc执行这个文件重新登陆了。你可以用echo $PATH命令查看PATH的值。

V'k8l$i(H+B0

ref:龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台?oq3\ \*y+~7g ?:E0p

#www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台 {Z9Oc-Q @v

#C'Mz2O0D{0Vb,Wi0#longzxr.i.sohu.com/blog/view/205819276.htm龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台9i$o$IfPs

龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台:M1gF,N2b W P B'?:g

 

6c.sy*h\b$yf0龙8国际_龙8国际下载_龙8国际娱乐官方网(EETOP)-电子设计论坛、博客、超人气的电子工程师资料分享平台6dL"ZZe

 

A[1h in|?8PT;dP0

TAG: export PATH 编译路径

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar