http://qs1969.pair.com?node_id=1017474

garybiscuit has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I've successfully installed the DBI and DBD::Oracle Perl modules, but I've noticed that I can't "use DBD::Oracle;" unless my LD_LIBRARY_PATH is set in my environment before I call the Perl program that attempts to use DBD::Oracle...

# ========================================== BEGIN { $ENV{'ORACLE_HOME'} = '/my/oracle_home'; $ENV{'LD_LIBRARY_PATH'} = '/my/oracle_home/lib'; } use strict; use warnings; use DBI; use DBD::Oracle; print "Hello world!\n"; # ==========================================

...produces...

# ========================================== Can't load '/usr/perl5/5.16.2/lib/site_perl/5.16.2/sun4-solaris/auto/D +BD/Oracle/Oracle.so' for module DBD::Oracle: ld.so.1: perl: fatal: li +bclntsh.so.11.1: open failed: No such file or directory at /usr/perl5 +/5.16.2/lib/5.16.2/sun4-solaris/DynaLoader.pm line 190. at ./ecm_bounce_pusher.pl line 15. Compilation failed in require at ./test_program.pl line 8. BEGIN failed--compilation aborted at ./test_program.pl line 8. # ==========================================

... if LD_LIBRARY_PATH is NOT set in my environment first. However, if I *do* set LD_LIBRARY_PATH in the environment, the above code works fine.

Obviously I could make a wrapper script that sets LD_LIBRARY_PATH before invoking my above program, but I'd like to make my program as compact and self-reliant as possible (i.e. no wrapper script).

Is there anything I can do to be able to invoke DBD::Oracle without having to set LD_LIBRARY_PATH first in the environment?

---- MY STATS ----
OS: Solaris 10
Perl: 5.16
Oracle: 11.2.0.3 Instant Client
-------------------

Thanks,
Gary