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