Hi Martin, Reinhard and Jens,

Thanks for your advice. Following is related info you referred:

1> Are all the components in your chain (perl, driver manager, driver) all64 
bit? 
[Chunmei]: The unixODBC driver and the DB2 driver are 64bit. Seems that my perl 
is 32bit from following info. Is this the reason for my error????
        unixus...@dsliaa05 # > file perl
        perl: executable (RISC System/6000) or object module

2> What does perl -V output?
Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
  Platform:
    osname=aix, osvers=4.1.4.0, archname=aix
    uname='aix cyclops 1 4 00051664a000 '
    config_args='-des -dcf_email=supp...@indigostar.com 
-dperladmin=supp...@indigostar.com -Dcf_by=IndigoSTAR -Uinstallusrbinperl'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef 
usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE 
-qmaxmem=16384 -qnoansialias',
    optimize='-O',
    cppflags=''
    ccversion='3.1.3.3', gccversion='', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=4
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='ld', ldflags =''
    libpth=/lib /usr/lib /usr/ccs/lib
    libs=-ldbm -lld -lm -lC -lc -lbsd -lPW
    perllibs=-lld -lm -lC -lc -lbsd -lPW
    libc=, so=a, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_aix.xs, dlext=so, d_dlsymun=undef, ccdlflags='  
-bE:/opt/lib/perl5/5.8.0/aix/CORE/perl.exp'
    cccdlflags=' ', lddlflags='-bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp 
-bE:$(BASEEXT).exp -bnoentry -lC -lc'


Characteristics of this binary (from libperl):
  Compile-time options: USE_LARGE_FILES
  Locally applied patches:
        IndigoPerl Build 804
  Built under aix
  Compiled at Feb  9 2003 13:22:48
  %ENV:
    
PERL5LIB="/vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0:/vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0/aix/auto/DBI/"
    PERLHOME="/vobs/siebel/src/3rdparty/perl5.8/aix"
  @INC:
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0/aix
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0/aix/auto/DBI/
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/5.8.0/aix
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/5.8.0
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0/aix
    /vobs/siebel/src/3rdparty/perl5.8/aix/lib/site_perl/5.8.0
    /opt/lib/perl5/site_perl
    .
3> What ODBC driver manager are you using?
[Chunmei]: UnixODBC 2.3.0


4> I think it could be helpful (if no one else has a better proposal) to start 
fresh and record the entire make output in a file
[Chunmei]: I did it, but I didn't get any error when run 'make':
    a) perl Makefile.PL
        Warning: LD_LIBRARY_PATH doesn't include 
/home/eng-sm/unixuser/claire/test/perl/unixodbc_install2.3.0_64/
        [Chunmei]: the warning is strange. Even I set this environment to 
include this directory, it still report such warning. Meanwhile, I think AIX 
didn't use this environment but LIBPATH.
        WARNING: NO_META is not a known parameter.
        b) make
        NO warning.
        c) make test
        The error 'can't load library...' occur.

5> Looks to me like libperl.a is missing from the requirements list of ODBC.so. 
As long you don't have statically linked the perl runtime, this could be an 
issue.
[Chunmei]: Following command is used to create ODBC.so:
LD_RUN_PATH="/home/eng-sm/unixuser/claire/test/perl/unixodbc_install2.3.0_64/lib"
 ld  -bhalt:4 -bM:SRE 
-bI:/vobs/vob_src_3rdparty/src/3rdparty/perl2exe/aix/perl2exe/perl5.8/lib/5.8.0/aix/CORE/perl.exp
 -bE:ODBC.exp -bnoentry -lC -lc ConvertUTF.o ODBC.o dbdimp.o unicode_helper.o  
-o blib/arch/auto/DBD/ODBC/ODBC.so   
-L/home/eng-sm/unixuser/claire/test/perl/unixodbc_install2.3.0_64/lib -lodbc

No error reports during the build and the ldd also is ok. 

6> Maybe it is only a question of dynamic loaded libraries not included in the 
search path. If I remember well there is a LD_LIBRARY_PATH variable you can add 
locations where to search libraries to be loaded when executing the program.
[Chunmei]: AIX uses LIBPATH instead of LD_LIBRARY_PATH to search libraries. The 
value of $LIBPATH is 
"/home/eng-sm/unixuser/claire/test/perl/unixodbc_install2.3.0_64//lib:/usr/lib:/lib:/opt/IBM/db2/V9.7/lib64"
 in my environment.

Thanks,
Chunmei Wu


-----Original Message-----
From: Jens Rehsack [mailto:rehs...@googlemail.com] 
Sent: 2010年5月10日 14:06
To: dbi-dev@perl.org
Subject: Re: make test: dlopen error :can't load library ODBC.so

On 05/10/10 02:06, Chunmei Wu wrote:
> Hi everyone,
>
> OS: AIX
> perl version: 5.0
>
> After installed DBD-ODBC-1.21, I run 'make test', but failed 'can't load 
> library' error:
>                              t/20SqlServer...........ok 
> 2/65install_driver(ODBC) failed: Can't load 
> '/home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so'
>  for module DBD::ODBC: dlopen: 
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so:
>  can't load library 
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so103
>  
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so
>  at /vobs/siebel/src/3rdparty/perl5.8/aix/lib/5.8.0/aix/DynaLoader.pm line 
> 229.
>                               at (eval 4) line 3
>                              Compilation failed in require at (eval 4) line 3.
>                              Perhaps a required shared library or dll isn't 
> installed where expected
>                               at t/20SqlServer.t line 218
>
> But i can run ldd for this library:
>                              unixus...@dsliaa05 #>  ldd 
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so
>                              
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so
>  needs:
>                                       /usr/lib/libc.a(shr_64.o)
>                                       
> /home/eng-sm/unixuser/claire/test/perl/unixodbc_install2.3.0_64/lib/libodbc.a(libodbc.so.1)
>                                       /unix
>                                       /usr/lib/libcrypt.a(shr_64.o)
>                                       /usr/lib/libpthread.a(shr_xpg5_64.o)
>                                       /usr/lib/libiconv.a(shr4_64.o)
>
> Can you help me? Thanks in advance!

Looks to me like libperl.a is missing from the requirements list of ODBC.so.
As long you don't have statically linked the perl runtime, this could be an 
issue.

But the error reported is;

> dlopen: 
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so:
>  can't load library 
> /home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so103

The file 
/home/eng-sm/unixuser/claire/test/perl/DBD-ODBC-1.21/blib/arch/auto/DBD/ODBC/ODBC.so103
 
is required for some reason. 'make test' runs with the same permissions as 
'make' run, I assume.

Looks to me like something went wrong with your build. I think it could be 
helpful (if no one else has a better proposal) to start fresh and record the 
entire make output in a file:
$ perl Makefile.PL [flags ...] >log 2>&1
$ make >log 2>&1
$ make test >log 2>&1

If you add some flags to one of the lines, it might be good to echo the line 
first to the log and execute it then.

/Jens

Reply via email to