您的位置:首页 > 数据库 > Oracle

install_driver(Oracle) failed: Can't load `.../DBD/Oracle/Oracle.so' for module DBD::Oracle

2009-09-11 14:31 666 查看

Description

This section is from the "Practical
mod_perl
" book, by Stas
Bekman
and Eric
Cholet
. Also available from Amazon: Practical
mod_perl



Here's an example of the full error

report that you might see:

install_driver(Oracle) failed: Can't load

'/usr/lib/perl5/site_perl/5.6.1/i386-linux/auto/DBD/Oracle/Oracle.so'

for module DBD::Oracle:

libclntsh.so.8.0: cannot open shared object file: 

No such file or directory at

/usr/lib/perl5/5.6.1/i386-linux/DynaLoader.pm line 169.

at (eval 27) line 3

Perhaps a required shared

library or dll isn't installed where expected at 

/usr/local/apache/perl/tmp.pl line 11



On BSD-style filesystems, LD_LIBRARY_PATH
is not
searched for setuid
programs. If Apache is a
setuid
executable, you might receive this error.
Therefore, the first solution is to explicitly load the library from
the system-wide ldconfig
configuration file:

panic# echo $ORACLE_HOME/lib >> /etc/ld.so.conf

panic# ldconfig

(使用该方法我的问题就解决了)


Another solution to this problem is to modify the
Makefile
file (which is created when you run
perl Makefile.PL
) as follows:

Search for the line LD_RUN_PATH=

Replace it with LD_RUN_PATH=my_oracle_home/lib

where my_oracle_home
is, of course, the home
path to your Oracle installation. In particular, the file
libclntsh.so.8.0
should exist in the
lib
subdirectory.

Then just type make install
, and all should go
well.

Note that setting LD_RUN_PATH
has the effect of
hardcoding the path to my_oracle_home/lib
in the
file Oracle.so
, which is generated by
DBD::Oracle
. This is an efficiency mechanism, so
that at runtime it doesn't have to search through
LD_LIBRARY_PATH
or the default directories used by
ld
.

For more information, see the ld
manpage and the
essay on LD_LIBRARY_PATH
at
http://www.visi.com/~barr/ldpath.html
.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐