library path的设置问题 LD_LIBRARY_PATH SHLIB_PATH LIBPATH

由于平时的工作平台都是linux或unix,所以经常会遇到library path设置错误,导致程序编译或运行错误。所以在不同的平台上,一定要设置正确的library path变量,下面就来总结一下:


SHLIB_PATH 环境变量 [HP-UX]
在 HP-UX 上,该环境变量指定运行时在哪些目录中搜索  应用程序所需的库。


LD_LIBRARY_PATH 环境变量 [Linux 和 Solaris]
在 Linux 和 Solaris 上,该环境变量指定运行时在哪些目录中搜索  应用程序所需的库。  LD_LIBRARY_PATH环境变量主要是用于指定动态链接器(ld)查找ELF可执行文件运行时所依赖的动态库(so)的路径,其内容是以冒号分隔的路径列表。ld链接器将优先在该变量设置的路径中查找,若未找到则在标准库路径/lib和/usr/lib中继续搜索。
        临时设置LD_LIBRARY_PATH环境变量的最佳方式是:在执行你的程序前,先在bash中通过命令行或脚本来设置,这样你的特殊设置对系统的其它程序的运行而言是隔离的,不会影响其他程序对依赖库的查找路径,因为在bash中设置的环境变量只对本次会话有效。在你下次通过SSH工具连接到系统时,新会话的系统环境变量参数不受上次会话的设置影响。


LIBPATH 环境变量 [IBM AIX]
在 IBM AIX 上,该环境变量指定运行时在哪些目录中搜索 应用程序所需的库。


当然在设置的时候,也还要注意32位与64位的问题,之前遇到过:

在Pro*c 编译时报:libclntsh.so: wrong ELF class: ELFCLASS64 错误
 
出现在这种情况一般来说是由于当前的系统是64位,用的是64位的库进行编译的所以要修改一下要是用32位的lib
 
ORALIB = ${ORACLE_HOME}/lib
改为
ORALIB = ${ORACLE_HOME}/lib32
 
同是改一下.profile 里的
 
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:/usr/sfw/lib
改为
LD_LIBRARY_PATH=$ORACLE_HOME/lib32:/lib:/usr/lib:/usr/local/lib:/usr/sfw/lib
 
这样修改完之后在 make 的时候就不会出现在 那个错误了


以下是在sunrise 2.5 linux 上 run DBA的脚本出现的问题,
Perl Information:
        Version: 5.8.7
install_driver(Oracle) failed: Can't load '/app/arborperl/5.8.7/lib/site_perl/5.8.7/x86_64-linux/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.10.1: cannot open shared object file: No such file or directory at /app/arborperl/5.8.7/lib/5.8.7/x86_64-linux/DynaLoader.pm line 230.
 at (eval 7) line 3
Compilation failed in require at (eval 7) line 3.
Perhaps a required shared library or dll isn't installed where expected
 at ./run_dba.pl line 5003


这个也是64位的问题,要用64为的lib,所以设置以下环境变量后,程序可以运行:
setenv PATH /app/arborperl/5.8.7-64/bin:${PATH}
setenv LD_LIBRARY_PATH /app/arborperl/5.8.7-64/lib:$LD_LIBRARY_PATH

你可能感兴趣的:(Linux/Unix)