Hi Martin, unixus...@dsliaa05 # > perl -MExtUtils::MakeMaker -le 'print $ExtUtils::MakeMaker::VERSION;' 6.03
Ok. I will rebuild my perl to version 64 and try again. Thanks, Chunmei Wu -----Original Message----- From: Martin Evans [mailto:martin.ev...@easysoft.com] Sent: 2010年5月10日 16:32 To: Chunmei Wu Cc: dbi-users@perl.org Subject: Re: make test: dlopen error :can't load library ODBC.so Chunmei Wu wrote: > 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 Probably. You need to match the build type from Perl all the way down to the driver. > 2> What does perl -V output? > Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration: 32bit build of Perl <snipped perl -V output> > 3> What ODBC driver manager are you using? > [Chunmei]: UnixODBC 2.3.0 Good, that's ok. > > 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. You are correct. It is an old hang up the Makefile.PL from ages ago. I may try and remove that warning. > WARNING: NO_META is not a known parameter. What version of ExtUtils::MakeMaker are you using? e.g., $ perl -MExtUtils::MakeMaker -le 'print $ExtUtils::MakeMaker::VERSION;' 6.42 > b) make > NO warning. > c) make test > The error 'can't load library...' occur. I think we've diagnosed 32/64 bit mismatch. You need to rebuild Perl 64bit or rebuild unixODBC 32bit and get a 32bit version of your ODBC driver. > 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 BTW, I redirected this back to the dbi-users list as it is not appropriate to dbi-dev. Martin -- Martin J. Evans Easysoft Limited http://www.easysoft.com > > -----Original Message----- > From: Jens Rehsack [mailto:rehs...@googlemail.com] > Sent: 2010年5月10日 14:06 > To: dbi-...@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 > >