我安装的路径不是/usr,所以遇到了一些问题。下面就讲一下解决办法。
先来看几个相关的环境变量
PATH:大家应该都很熟悉。安装一个包后可能会在安装目录建立一个bin目录,里面都是些可执行程序,为了让系统能找到这些程序,就需要我们把该路径加入到PATH环境变量中。下面会讲到如何加入。
LDFLAGS:gcc等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=“-L/usr/lib -L/path/to/your/lib”。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果你明明安装了某个包,而安装另一个包时,它愣是说找不到,那就把那个包的lib路径加入的LDFALGS中试一下吧。
LD_RUN_PATH
用来指定在编译时到哪些目录去寻找动态库,多个目录以冒号隔开
CFLAGS:和LDFLAGS类似,只不过要向里加如的是头文件(.h文件)的路径,如:CFLAGS=“-I/usr/include -I/path/to/your/include”。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。
CPPFLAGS
CPPFLAGS 使安装程序在不同的目录下查找头文件
CFLAGS 与 CXXFLAGS
CFLAGS 表示用于 C 编译器的选项,CXXFLAGS 表示用于 C++ 编译器的选项,使安装程序在不同的目录下查找头文件
例如:
export HOME=/home/SCE/zhaolei
export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/lib:$HOME/local/BerkeleyDB.4.5/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$HOME/local/lib:$HOME/local/BerkeleyDB.4.5/lib:$LIBRARY_PATH
export LD_RUN_PATH=$LD_LIBRARY_PATH
export INCLUDE=$HOME/local/include:$INCLUDE
下面的变量一般不用设置:
export LDFLAGS="-L$HOME/local/lib -L$HOME/local/BerkeleyDB.4.5/lib"
export CPPFLAGS="-I$HOME/local/include -I$HOME/local/BerkeleyDB.4.5/include"
export CXXFLAGS=$CPPFLAGS
export CFLAGS=$CPPFLAGS
那如何在那些变量中加入这些路径呢?以PATH变量为例。
一种方法是:直接在命令行下:
$ PATH="$PATH:/path/to/your/bin:/another/path/to/bin"
$ export PATH
这种方法的好处是方便,立即生效,缺点是把当前会话或shell关了之后就失效了,下次还得运行一遍。
另一种方法是:把下面的两行内容加入到~/.bashrc文件中,如果想让其影响到整个系统而不仅仅是当前用户,就把下面的内容加入到/etc/bash.bashrc(记得有的系统是/etc/bashrc这个文件)
export PATH
需要注意的是,PATH变量的分隔符是:号,其他的是空格,
所以LDFLAGS应该是这样:
LDFLAGS=“$LDFLAGS -L/path/to/lib -L/path/to/lib”
CFLAGS应该是这样:
CFLAGS=“$CFLAGS -I/path/to/iclude -I/path/to/include”
使用LD_LIBRARY_PATH
http://blog.csdn.net/dzassn/article/details/1770776http://blog.csdn.net/lwhsyit/article/details/2830783
环境变量LD_LIBRARY_PATH用来指定查找共享库时除了默认路径之外的其他路径。(该路径在默认路径之前查找)
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时我们可以设置LD_LIBRARY_PATH。
例:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/work/lib/
这样就可以使用/work/lib/下的库文件了,运行程序后系统会自动到环境变量LD_LIBRARY_PATH指定的路径中查找其所需的库。
系统查找动态库的顺序
系统先找LD_LIBRARY_PATH下的库再找/lib and /usr/lib等路径下的库,还有/etc/ld.so.conf里指定的路径(如果ld.so.conf存在),man ldconfig for more information
使Linux启动之后就加载LD_LIBRARY_PATH的路径
/etc/rc.d/rc.local文件中加入export LD_LIBRARY_PATH="xxxxx" 即可
是以后的运行中不再需要设置环境变量去定位动态库。比如,有一个
/usr/local/lib/libfoo.so,而你的bar程序需要这个libfoo.so,编译、链接时最好
这样 :gcc -Wall -pipe -O3 -o bar -R/usr/local/lib -L/usr/local/lib bar.c -lfoo
转载于:https://blog.51cto.com/nbaiwan/1408488