浅析Linux LD_LIBRARY_PATH


浅析Linux LD_LIBRARY_PATH
 
     ㈠ 历史背景
        
        现如今、软件大多自带共享库、或者出于安全、或者基于商业考量
        如:
        ORACLE :$ORACLE_HOME/lib
        MySQL :$HOME/mysql/lib
        
        下面贴上oracle用户下.bash_profile里关于LD_LIBRARY_PATH设置
[plain] 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/X11R6/lib  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdk/jre/lib/i386/server  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/rdbms/lib    
 
     ㈡ 几个概念
        
        ① 下面几个大意相近
           
           共享库、动态链接库、.so文件
           
        ② ld.so 花名又叫:共享库加载器
        
        
     ㈢ 存在的意义
        
        用来告诉 ld.so 到哪里可以找到某某人的共享库
        
        
     ㈣ 大概说说
        
        .so文件的管理和加载由ld.so负责、他在标准路径/lib 或 /usr/lib 里查找APP所需的.so、
        但对于非标路径:
        Linux做法是把私有路径加入/etc/ld.so.conf、运行ldconfig生成ld.so.cache、ld.so会去查找这个cache
        UNIX作风则是采用LD_LIBRARY_PATH来处理非标路径的.so文件
        
        查找优先级如下(Linux):
        
        ① LD_LIBRARY_PATH 环境变量指定目录
        ② /etc/ld.so.conf指定目录
        ③ 标准路径 先/usr/lib 再 /lib 
        
     ㈤ 常见错误
        
        error while loading shared libraries:ooxx.so.0:cannot open shared object file:No such file or directory
        这里的ooxx是如何命名的、有兴趣的朋友自行参考 点击打开链接
 
     ㈥ 通用的方案
        
        ① 将这些自带库cp到/usr/lib或/lib、然后ldconfig   有个案例:点击打开链接
        ② /etc/ld.so.conf 、然后ldconfig
        ③ LD_LIBRARY_PATH(这个变量有些遭人诟病)
 

相关内容

    暂无相关文章