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
> 
> 

Reply via email to