Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量对所有⽤户有效在/etc/profile增加以下内容。只对当前⽤户有效在Home⽬录下的
.bashrc或.bash_profile⾥增加下⾯的内容:
(注意:等号前⾯不要加空格,否则可能出现 command not found)
#在PATH中到可执⾏⽂件程序的路径。
export PATH =$PATH:$HOME/bin
#gcc到头⽂件的路径
C_INCLUDE_PATH=/usr/include/libxml2:/MyLib
export C_INCLUDE_PATH
#g++到头⽂件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib
export CPLUS_INCLUDE_PATH
#到动态链接库的路径
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib
export LD_LIBRARY_PATH
#到静态库的路径
LIBRARY_PATH=$LIBRARY_PATH:/MyLib
export LIBRARY_PATH
库⽂件在连接(静态库和共享库)和运⾏(仅限于使⽤共享库的程序)时被使⽤,其搜索路径是在系统中进⾏设置的。⼀般 Linux 系统把 /lib 和 /usr/lib 两个⽬录作为默认的库搜索路径,所以使⽤这两个⽬录中的库时不需要进⾏设置搜索路径即可直接使⽤。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库⽂件的搜索路径有下列两种⽅式,可任选其⼀使⽤:
在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。
在 /etc/f ⽂件中添加库的搜索路径。
将⾃⼰可能存放库⽂件的路径都加⼊到/etc/f中是明智的选择
添加⽅法也极其简单,将库⽂件的绝对路径直接写进去就OK了,⼀⾏⼀个。例如:
/usr/X11R6/lib
/usr/local/lib
/opt/lib
需要注意的是:第⼆种搜索路径的设置⽅式对于程序连接时的库(包括共享库和静态库)的定位已经⾜够了,但是对于使⽤了共享库的程序的执⾏还是不够的。这是因为为了加快程序执⾏时对共享库的定位速度,避免使⽤搜索路径查共享库的低效率,所以是直接读取库列表⽂件 /etc/ld.so.cache 从中进⾏搜索的。/etc/ld.so.cache 是⼀个⾮⽂本的数据⽂件,不能直接编辑,它是根据 /etc/f 中设置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库⽂件集中在⼀起⽽⽣成的(ldconfig 命令要以 root 权限执⾏)。因此,为了保证程序执⾏时对库的定位,在 /etc/f 中进⾏了库搜索路径的设置之后,还必须要运⾏ /sbin/ldconfig 命令更新 /etc/ld.so.cache ⽂件之后才可以。ldconfig ,简单的说,它的作⽤就是将/etc/f列出的路径下的库⽂件缓存到/etc/ld.so.cache 以供使⽤。因此当安装完⼀些库⽂件,(例如刚安装好glib),或者修改f增加新的库路径后,需要运⾏⼀下 /
sbin/ldconfig使所有的库⽂件都被缓存到ld.so.cache中,如果没做,即使库⽂件明明就在/usr/lib下的,也是不会被使⽤的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想⼤骂computer蠢猪⼀个。
在程序连接时,对于库⽂件(静态库和共享库)的搜索路径,除了上⾯的设置⽅式之外,还可以通过 -L 参数显式指定。因为⽤ -L 设置的路径将被优先搜索,所以在连接的时候通常都会以这种⽅式直接指定要连接的库的路径。
前⾯已经说明过了,库搜索路径的设置有两种⽅式:在环境变量 LD_LIBRARY_PATH 中设置以及在 /etc/f ⽂件中设置。其中,第⼆种设置⽅式需要 root 权限,以改变 /etc/f ⽂件并执⾏ /sbin/ldconfig 命令。⽽且,当系统重新启动后,所有的基于 GTK2 的程序在运⾏时都将使⽤新安装的 GTK+ 库。不幸的是,由于 GTK+ 版本的改变,这有时会给应⽤程序带来兼容性的问题,造成某些程序运⾏不正常。为了避免出现上⾯的这些情况,在 GTK+ 及其依赖库的安装过程中对于库的搜索路径的设置将采⽤第⼀种⽅式进⾏。这种设置⽅式不需要 root 权限,设置也简单:
$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
可以⽤下⾯的命令查看 LD_LIBRAY_PATH 的设置内容:
$ echo $LD_LIBRARY_PATH
linux下gcc编译的四个步骤⾄此,库的两种设置就完成了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。