Re: make test: dlopen error :can't load library ODBC.so

[email protected] (Martin Evans)
Newsgroups perl.dbi.users
Organization Easysoft Limited
Message-ID <[email protected]>
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????
> 	unixuser\@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:[email protected]] 
> Sent: 2010年5月10日 14:06
> To: [email protected]
> 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:
>>                              unixuser\@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
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.