Jonathan, ...and finally, are you aware of a version that points to the 64 bit libraries. If not... no big deal... I'll just hack it. And your help and responsiveness has been incredible. Better than paid support. Regards, Joe
-----Original Message----- From: Jonathan Leffler [mailto:[EMAIL PROTECTED] Sent: Thursday, February 08, 2007 2:38 PM To: Wholey, Joseph (GTI) Cc: DBD::DB2 Maintenance Team; DBI Users Mailing List Subject: Re: perl DBD and DBI for 64 bit perl On 2/8/07, Wholey, Joseph (GTI) <[EMAIL PROTECTED]> wrote: You are correct... it is a 32 bit file.... bear with me...I'm a little confused by this statement: "You need to distinguish between the database server (which I think your evidence below shows is the case) and the client software used to connect to it." The server in question, is the database server. The parenthetical remark in my sentence wasn't complete - apologies. If you ignore that, then I said that you simply need to be aware that the application program (eg Perl + DBI + DBD::DB2) uses a client library to connect to the database server. It does not include the database server code in the client program. And that means that the client program can have a different bittiness from the server. What the parenthetical remark should have been is "(and I think your evidence below shows that the server is a 64-bit server)". Anyway, moving forward, how do I force the compilation of the modules to go to point to the db2 64bit libraries? Do I need to modify the Makefile.pl script? Is there an easier way? Note: the *.1 files are links. [EMAIL PROTECTED] lib]# locate libdb2.so /opt/IBM/db2/V8.1/lib/libdb2.so.1 /opt/IBM/db2/V8.1/lib/libdb2.so /opt/IBM/db2/V8.1/lib64/libdb2.so.1 /opt/IBM/db2/V8.1/lib64/libdb2.so This is the valuable information...You have the 64-bit libraries; you just need to persuade Perl to use them. I don't have the source for DBD::DB2 0.78 on my machine - but I looked at 0.76 instead. In Makefile.PL, there is code to the effect: # libraries required to build DBD::DB2 driver if( $os eq 'MSWin32' || $os eq 'MSWin64' || $os eq 'os2' ) { $sysliblist = qq(-L"$DB2/lib" db2cli db2api); my @libpaths = split /;/, $ENV{'LIB'}; my $libpath; while( @libpaths ) { ( $libpath = shift(@libpaths) ) =~ s/"//g; # Remove quotes $libpath =~ s:\\:/:g; if( $libpath && $sysliblist !~ /-L"$libpath"/i ) { $sysliblist .= qq( -L"$libpath"); } } } else { $sysliblist = "-L$DB2/lib -ldb2"; } This needs to be modified, I believe, so the last else clause takes into account the possibility of a 64-bit Perl. There are various configuration items that could be used to identify 64-bit Perl: $Config{use64bitint} $Config{use64bitall} $Config{intsize} == 8 $Config{ptrsize} == 8 So, if some suitable values of these are set, you should change $sysliblist to use -L$DB2/lib64 elsif ($Config{ptrsize} == 8) { $sysliblist = "-L$DB2/lib -ldb2"; } With this hacked into Makefile.PL, there's a chance you'll build correctly. DBD::DB2 Maintenance Team - please note this suggested change; validate and fix for the next release of DBD::DB2. Thanks! Thanks again... Regards, Joe -----Original Message----- From: Jonathan Leffler [mailto:[EMAIL PROTECTED] Sent: Thursday, February 08, 2007 1:14 PM To: Wholey, Joseph (GTI) Cc: DBD::DB2 Maintenance Team; DBI Users Mailing List Subject: Re: perl DBD and DBI for 64 bit perl On 2/8/07, Wholey, Joseph (GTI) <[EMAIL PROTECTED] > wrote: OK... we're making progress... that is a 64 bit db2... maybe there is a problem with their libraries. Anyway, what from that error I'd sent you indicates that it's going against a 32 bit db2 lib? btw... I really appreciate your help on this. You need to distinguish between the database server (which I think your evidence below shows is the case) and the client software used to connect to it. The evidence from your build suggests that the client software installed in /opt/IBM/db2/V8.1/lib (the libdb2.so file in there) is a 32-bit library. You can confirm that by running the 'file' command on it. For example: Anubis JL: cd /usr/lib Anubis JL: file libc.so libc.so: ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped Anubis JL: cd sparcv9 Anubis JL: file libc.so libc.so: ELF 64-bit MSB dynamic lib SPARCV9 Version 1, dynamically linked, not stripped Anubis JL: Assuming that this is the problem, you will either need to install the 64-bit client software - probably in a separate location so you don't break the existing code that uses the 32-bit software (though I'm not sure how easily you can do that with DB2) - or you have to use a 32-bit Perl and 32-bit DBI to build a 32-bit DBD::DB2 using the 32-bit DB2 client libraries. If this is not the problem, then we need to understand why GCC is refusing to play with the libdb2.so library in /opt/IBM/... rpcjq-mphqa1cjs101;/rpcjqhome/rpcjq>exit [EMAIL PROTECTED] DBD_DBI]# su - rpcjq mphqa1cjs101 ############################################################ *** db2instance ---> rpcjq *** db2dbdft ---> DBRPCJ *** schema ---> RPCJQ *** UNIX ID ---> rpcjq ############################################################ rpcjq-mphqa1cjs101;/rpcjqhome/rpcjq>db2level DB21085I Instance "rpcjq" uses "64" bits and DB2 code release "SQL08025" with level identifier "03060106". Informational tokens are "DB2 v8.1.3.112", "s060429", "MI00159", and FixPak "12". Product is installed at "/opt/IBM/db2/V8.1". -----Original Message----- From: Jonathan Leffler [mailto:[EMAIL PROTECTED] Sent: Thursday, February 08, 2007 11:30 AM To: Wholey, Joseph (GTI) Cc: dbi-users@perl.org Subject: Re: perl DBD and DBI for 64 bit perl On 2/8/07, Wholey, Joseph (GTI) <[EMAIL PROTECTED]> wrote: I'm really in a pinch here: Here's the error I get when I try to compile the DBD:. Can you help me out here. Below you'll find my level of Perl and the dbd and dbi versions I'm attempting to install. gcc -shared DB2.o dbdimp.o -o blib/arch/auto/DBD/DB2/DB2.so -L/opt/IBM/db2/V8.1/lib -ldb2 /usr/bin/ld: skipping incompatible /opt/IBM/db2/V8.1/lib/libdb2.so when searching for -ldb2 Well, it looks like the DB2 client software you have is probably a 32-bit version, so GCC is quite correctly not linking your 64-bit DBD::DB2 module with the 32-bit DB2 client software -- it wouldn't work even if it tried. You have two options: * Find, install, use a 64-bit DB2 client library. * Recompile Perl, DBI and then DBD::DB2 as 32-bit code to use the 32-bit DB2 client. Both would work - which is better for you depends on whether you can find a 64-bit DB2 client library. /usr/bin/ld: cannot find -ldb2 collect2: ld returned 1 exit status make: *** [blib/arch/auto/DBD/DB2/DB2.so] Error 1 [EMAIL PROTECTED] DBD-DB2-0.78]# Here are the versions I'm trying to compile as well as the perl version. DBI-1.51 DBD-DB2-0.78 [EMAIL PROTECTED] DBD-DB2-0.78]# perl -v This is perl, v5.8.5 built for x86_64-linux-thread-multi -- Jonathan Leffler <[EMAIL PROTECTED]> #include <disclaimer.h> Guardian of DBD::Informix - v2005.02 - http://dbi.perl.org "I don't suffer from insanity - I enjoy every minute of it." -------------------------------------------------------- If you are not an intended recipient of this e-mail, please notify the sender, delete it and do not read, act upon, print, disclose, copy, retain or redistribute it. Click here for important additional terms relating to this e-mail. http://www.ml.com/email_terms/ --------------------------------------------------------