PATH LD_LIBRARY_PATH LDFLAGS LD_RUN_PATH CFLAGS

By | 05月08日
Advertisement

我安装的路径不是/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这个文件)

PATH LD_LIBRARY_PATH LDFLAGS LD_RUN_PATH CFLAGS
PATH LD_LIBRARY_PATH LDFLAGS LD_RUN_PATH CFLAGS

然后,重新启动shell即可。

需要注意的是,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/1770776
http://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" 即可

如果在链接时使用了"-R"和"-L"选项,则相关动态库的路径将保存在ELF文件中,于
是以后的运行中不再需要设置环境变量去定位动态库。比如,有一个
/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

Similar Posts:

  • No package 'gtk+-2.0' found 错误【PKG_CONFIG_PATH】

    make install安装一个程序时,No package 'gtk+-2.0' found 错误,要如何解决 需要下载的包: ftp://mirrors.kernel.org/gnu/gettext/gettext-0.17.tar.gz ftp://ftp.gtk.org/pub/glib/2.15/glib-2.15.1.tar.bz2 ftp://ftp.gtk.org/pub/pango/1.19/pango-1.19.0.tar.bz2 http://ftp.gnome.org/p

  • LD_RUN_PATH && LD_LIBRARY_PATH

    LD_LIBRARY_PATH Specifies the directories that are to be searched for libraries at run time. LD_RUN_PATH Specifies the directories that are to be searched for libraries at both link and run time. For example, if you installed the ESSL 32-bit librarie

  • LD_LIBRARY_PATH Is Not The Answer

    When an executable is run that relies on shared libraries not defined in the global search path, an error similar to the following is displayed: $ curl ld.so.1: curl: fatal: libgcc_s.so.1: open failed: No such file or directory Killed Typically this

  • linux 下ffmpeg和mencoder安装

    ffmpeg和mencoder是进行视频转换和视频抽帧的重要开源工具,支持linux和windows环境下的视频转换和视频抽帧操作.本文章记录在linux这两者工具的安装过程.ffmpeg集成视频编码/解码,视频抽帧.视频流采集.视频录制综合的开源视频解决方案.ffmpeg基于linux开发,但是可以很好的在主流的操作系统上运行 FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用.FFmpeg支持MPEG.DivX.MPEG4.AC3.DV.FLV等40多种编码,A

  • 最全的剖析QEMU原理的文章1

    转自: http://people.cs.nctu.edu.tw/~chenwj/dokuwiki/doku.php?id=qemu How To Become A Hacker 写给新手程序员的一封信 目录 建置 QEMU User Mode SPARC PowerPC ARM System Mode 安裝系統 Buildroot Monitor Snapshot Network Tracing Cross Compile Debug & Testing Internal 源碼目錄概觀 Mem

  • 使用DirecetFB支持Qt4.7.0,加速启动QT

    使用DirecetFB支持Qt4.7.0 使用DirecetFB支持Qt4.7.0 摘要:如何在ok6410上使用Directfb,并且使用它支持Qt4.7.0 关键字:directfb 1.2.8 Qt4.7.0 tslib ok6410 1.前言: 很久之前就已经听说过directFb,但实际上由于时间和精力的关系,一直没有去好好地了解.这次小师弟的项目在Qt的刷新效率上出现了瓶颈,想到directfb具有硬件图形加速功能,于是就向他推荐了.同时,帮人帮到底,打算自己先做一遍,再告诉他方法.

  • linux动态库加载的秘密(原文地址:http://www.cnblogs.com/LiuYanYGZ/p/5545835.html)

    linux动态库加载的秘密 摘自http://gotowqj.iteye.com/blog/1926734 摘自http://www.360doc.com/content/14/0313/13/12747488_360246417.shtml linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识. 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/ls lin

  • 在redhat server 6 安装gcc-4.5.2

    http://blog.csdn.net/clodfront/article/details/7046122 在redhat server 6 安装gcc-4.5.2 安装gcc 有几个依赖项 gmp mpgr mpc ppl我现在装的是(gmp-4.3.2.tar.bz2 mpfr-2.4.2.tar.bz2 mpc-0.8.1.tar.gz ) 这三个也有以来关系 得先安装gmp 其次mpfr 再是 mpc 然后是ppl gmp mpfr 可以到http://mirror.bjtu.edu.

  • hadoop2.1.0和hadoop2.2.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable的错误,但在实际测试中是可以正常安装并可以运行自带的w

  • hadoop2.1.0编译安装教程(转载)

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable的错误,但在实际测试中是可以正常安装并可以运行自带的w

Tags: