Re: How to set LD_LIBRARY_PATH

[email protected] (Marilyn Sander)
Newsgroups perl.dbi.users,perl.beginners
Message-ID <[email protected]>
On May 28, 2010, at 9:33 AM, Paul Johnson wrote:

> On Fri, May 28, 2010 at 06:14:38AM -0400, John Scoles wrote:
> 
>> You will have to set those values before your modules load.
>> 
>> So you should stick them in the BEGIN and that should work
> 
> ... except where it doesn't, such as on Solaris for example.  Here,
> LD_LIBRARY_PATH (at least) really does need to be set before the process
> starts.  You can do this by writing a shell wrapper, or re-execing your
> perl script if the value is not already set.
> 
> You're using linux and I'm not sure if this sort of messing about is
> required there.
> 
> 
>> http://www.compuspec.net/reference/language/perl/BEGIN_and_END.shtml
>> 
>> cheers
>> John Scoles
>> 
>> On Fri, May 28, 2010 at 3:45 AM, newbie01 perl <[email protected]>wrote:
>> 
>>> Hi all,
>>> 
>>> Can someone advise how to set LD_LIBRARY_PATH from within the Perl scripts?
>>> 
>>> If I set LD_LIBRARY_PATH from the command line, all is okay
>>> 
>>> [oracle ~]$ perl -e 'use DBD::Oracle; print $DBD::Oracle::VERSION,"\n";'
>>> Can't load
>>> 
>>> '/oracle/product/db/11.1/perl/lib/site_perl/5.8.3/x86_64-linux-thread-multi/auto/DBD/Oracle/Oracle.so'
>>> for module DBD::Oracle: libclntsh.so.11.1: cannot open shared object file:
>>> No such file or directory at
>>> /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/DynaLoader.pm line 230.
>>> at -e line 1
>>> Compilation failed in require at -e line 1.
>>> BEGIN failed--compilation aborted at -e line 1.
>>> [oracle ~]$ export LD_LIBRARY_PATH=/oracle/product/db/11.1/lib
>>> [oracle ~]$ perl -e 'use DBD::Oracle; print $DBD::Oracle::VERSION,"\n";'
>>> 1.15
>>> 
>>> But if I do the following instead in the Perl script, it does not work? How
>>> to set the LD_LIBRARY_PATH then?
>>> 
>>> $ENV{ORACLE_HOME}=$ORACLE_HOME;
>>> $ENV{ORACLE_SID}=$ORACLE_SID;
>>> $ENV{PATH}="$ORACLE_HOME/bin:$PATH";
>>> $ENV{LD_LIBRARY_PATH}="$ORACLE_HOME/lib";
>>> 
>>> FYI, the script is to run from a cron which is why am setting
>>> LD_LIBRARY_PATH in the script.
>>> 
>>> Any response will be very much appreciated. Thanks in advance.
>>> 

Have you considered doing a require instead of a use.  With require, the loading is done at run time, and would be governed by the setting of LD_LIBRARY_PATH, at the time the require statement is executed.  Just set LD_LIBRARY_PATH before doing the require.
--Marilyn
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.