develooper Front page | perl.dbi.users | Postings from March 2008

Re: Library not found errors with DBD-Oracle-1.20

Thread Previous
From:
John Scoles
Date:
March 18, 2008 11:22
Subject:
Re: Library not found errors with DBD-Oracle-1.20
Not 100% sure on you situation but one thing I know is that with the 
instant cleint some of the .so files have been smooched together into 
one file called

ibclntsh.so.10.1  so what you might try is set a symbolic link to that 
file like this

ln -s libclntsh.so ibclntsh.so.10.1

to get this when you la -a

 libclntsh.so -> libclntsh.so.10.1

Just a thought
cheers john scoles

James H. McCullars wrote:
> Hi, I have successfully installed the Oracle instant client, DBI-1.602 
> and DBD-Oracle 1.20 and can connect to a database on a remote host, 
> but only if I set LD_LIBRARY_PATH to the directory where the instant 
> client is installed.  This is fine, but I need to do this from a CGI 
> script, and setting the environment there does not work.  I know that 
> there is a way to do this in Apache using a SetEnv statement, but I 
> would prefer not to do that.  The problem is, the library should be 
> found.  The message that is being logged is this:
>
> install_driver(Oracle) failed: Can't load 
> '/usr/local/lib/perl5/site_perl/5.8.7/sun4-solaris/auto/DBD/Oracle/Oracle.so' 
> for module DBD::Oracle: ld.so.1: perl: fatal: libnnz10.so: open 
> failed: No such file or directory at 
> /usr/local/lib/perl5/5.8.7/sun4-solaris/DynaLoader.pm line 230.
>  at (eval 3) line 3
> Compilation failed in require at (eval 3) line 3.
> Perhaps a required shared library or dll isn't installed where expected
>
> If I set ORACLE_HOME and LD_LIBRARY_PATH before doing the perl 
> Makefile.PL and the make, then Oracle.so gets compiled like this:
>
> LD_RUN_PATH="/usr/local/pkg/oracle-instant-client/instantclient_10_2" 
> gcc  -G -L/usr/local/lib Oracle.o dbdimp.o oci8.o  -o 
> blib/arch/auto/DBD/Oracle/Oracle.so 
> -L/usr/local/pkg/oracle-instantclient/instantclient_10_2 -lclntsh
>
> I then unset LD_LIBRARY_PATH and do an ldd command on Oracle.so, and 
> it cannot find libnnz10.so:
>
> bash-2.05$ ldd blib/arch/auto/DBD/Oracle/Oracle.so
>         libclntsh.so.10.1 => 
> /usr/local/pkg/oracle-instant-client/instantclient_10_2/libclntsh.so.10.1
>         libc.so.1 =>     /usr/lib/libc.so.1
>         libnnz10.so =>   (file not found)
>         libkstat.so.1 =>         /usr/lib/libkstat.so.1
>         libnsl.so.1 =>   /usr/lib/libnsl.so.1
>         libsocket.so.1 =>        /usr/lib/libsocket.so.1
>         libgen.so.1 =>   /usr/lib/libgen.so.1
>         libdl.so.1 =>    /usr/lib/libdl.so.1
>         libsched.so.1 =>         /usr/lib/libsched.so.1
>         libaio.so.1 =>   /usr/lib/libaio.so.1
>         librt.so.1 =>    /usr/lib/librt.so.1
>         libm.so.1 =>     /usr/lib/libm.so.1
>         libmp.so.2 =>    /usr/lib/libmp.so.2
>         libmd5.so.1 =>   /usr/lib/libmd5.so.1
>         /usr/platform/SUNW,UltraAX-i2/lib/libc_psr.so.1
>         /usr/platform/SUNW,UltraAX-i2/lib/libmd5_psr.so.1
>
> Even if I manually recompile Oracle.so adding a -R parameter with the 
> location of the Oracle libraries, it the ldd command will not locate 
> the library:
>
> bash-2.05$ gcc  -G -L/usr/local/lib Oracle.o dbdimp.o oci8.o  -o 
> blib/arch/auto/DBD/Oracle/Oracle.so
> -L/usr/local/pkg/oracle-instant-client/instantclient_10_2
> -R/usr/local/pkg/oracle-instant-client/instantclient_10_2 -lclntsh
> bash-2.05$ ldd blib/arch/auto/DBD/Oracle/Oracle.so libclntsh.so.10.1 
> => 
> /usr/local/pkg/oracle-instant-client/instantclient_10_2/libclntsh.so.10.1
>         libc.so.1 =>     /usr/lib/libc.so.1
>         libnnz10.so =>   (file not found)
>         libkstat.so.1 =>         /usr/lib/libkstat.so.1
>         libnsl.so.1 =>   /usr/lib/libnsl.so.1
>         libsocket.so.1 =>        /usr/lib/libsocket.so.1
>         libgen.so.1 =>   /usr/lib/libgen.so.1
>         libdl.so.1 =>    /usr/lib/libdl.so.1
>         libsched.so.1 =>         /usr/lib/libsched.so.1
>         libaio.so.1 =>   /usr/lib/libaio.so.1
>         librt.so.1 =>    /usr/lib/librt.so.1
>         libm.so.1 =>     /usr/lib/libm.so.1
>         libmp.so.2 =>    /usr/lib/libmp.so.2
>         libmd5.so.1 =>   /usr/lib/libmd5.so.1
>         /usr/platform/SUNW,UltraAX-i2/lib/libc_psr.so.1
>         /usr/platform/SUNW,UltraAX-i2/lib/libmd5_psr.so.1
>
> But the file is definitely there:
>
> bash-2.05$ ls -la 
> /usr/local/pkg/oracle-instant-client/instantclient_10_2/libnnz10.so
> -rwxr-xr-x   1 jim      100      6135928 Dec 20  2006 
> /usr/local/pkg/oracle-instant-client/instantclient_10_2/libnnz10.so
>
> Does anyone have any idea why the library file is not being found at 
> runtime without LD_LIBRARY_PATH?  It almost seems as if once the 
> oracle-install-client directory is searced once, it will not search it 
> again.  I know there are possible workarounds (like symlinking all 
> those files to /usr/lib, or maybe setting the environment in Apache), 
> but I would prefer to get this working with as few system changes as 
> possible.  This is Solaris 9 and gcc 3.1.  Thanks...
>
> Jim McCullars
> University of Alabama in Huntsville
>

Thread Previous


Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About