In general compiling DBD:Oracle for 64 bit machines has been a hit or miss operation. The main thing to remember is you will have to compile using 32 bit Perl and compile DBD::Oracle against a 32bit client which sort of defeats the purpose of having a 64bit box. So until 64bit Perl comes out we will be posing in this README any success stories we have come across -------- Original Message -------- Subject: Building 32bit DBD::Oracle against 64bit Oracle From: Dennis Reso Date: 7/9/2008 5:44 PM Priority: Normal Building DBD::Oracle v1.21 against Perl 5.8.5 Oracle 9.2.0.4 Solaris 8 Got the dreaded "wrong ELF class" when the Oracle.so ends up built against the 64bit library instead of the one in $ORACLE_HOME/lib32. Use 'dump -vL Oracle.so' to see the internalized RPATH definition. Tried the following solution, widely posted, without success: perl Makefile.PL -m $ORACLE_HOME/rdbms/demo/demo_rdbms32.mk What worked for me (pass the LIBDIR to the Oracle make process): export ORACLE_HOME=/apps/Oracle9.2.0.4 export LD_LIBRARY_PATH=$ORACLE_HOME/lib32 perl -pi -e 's/CC=true/CC=true LIBDIR=lib32/' Makefile.PL perl Makefile.PL -m $ORACLE_HOME/rdbms/demo/demo_rdbms32.mk make The LIBDIR= is defined in $ORACLE_HOME/rdbms/lib/env_rdbms.mk which also includes a REDEFINES32= that overrides it, but is only used by the $ORACLE_HOME/rdbms/lib/ins_rdbms.mk. Oracle bug? Also repeated the same failure and success with Oracle 9.2.0.8 Solaris 10 Oracle 10.2.0.3 Solaris 10 Seems fixed in demo_rdbms32.mk (no Makefile.PL edit needed ) as of Oracle 10.2.0.4 Solaris 10 Probably also fixed in some patchset newer than 9.2.0.4. -- Dennis Reso -------- Original Message -------- Subject: DBD::Oracle 64-bit success story From: H.Merijn Brand Date: On Mon, 14 Apr 2008 09:48:41 Priority: Normal I finally got round trying Oracle Instant Client on Linux with no Oracle installed, connecting to a 64bit Oracle 9.2.0.8 on HP-UX 11.11/64. I had to do some fiddling with Makefile.PL (see bottom). Sorry for this being long. Feel free to mold it into anything useful. 1. Before you start on DBD::Oracle, make sure DBD::ODBC works. That will assure your DSN works. Install unixODBC before anything else. 2. Assuming you've got OIC from the rpm's, you will have it here: /usr/include/oracle/11.1.0.1/client /usr/lib/oracle/11.1.0.1/client /usr/share/oracle/11.1.0.1/client 3. for the 64 bit clienat we have these rpm oracle-instantclient-basic-11.1.0.1-1.x86_64.rpm oracle-instantclient-devel-11.1.0.1-1.x86_64.rpm oracle-instantclient-jdbc-11.1.0.1-1.x86_64.rpm oracle-instantclient-odbc-11.1.0.1-1.x86_64.rpm oracle-instantclient-sqlplus-11.1.0.1-1.x86_64.rpm and to add to the confusement, they install to /usr/include/oracle/11.1.0.1/client64 /usr/lib/oracle/11.1.0.1/client64 /usr/share/oracle/11.1.0.1/client64 4. To make DBD::ODBC work, I had to create a tnsnames.ora, and I chose /usr/lib/oracle/11.1.0.1/admin/tnsnames.ora /usr/lib/oracle/11.1.0.1/admin > cat sqlnet.ora NAMES.DIRECTORY_PATH = (TNSNAMES, ONAMES, HOSTNAME) /usr/lib/oracle/11.1.0.1/admin > cat tnsnames.ora ODBCO = ( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP ) ( PORT = 1521 ) ( HOST = rhost ) ) ) ( CONNECT_DATA = ( SERVICE_NAME = odbctest ) ) ) /usr/lib/oracle/11.1.0.1/admin > Real world example changed to hide the obvious. Important bits are "ODBCO", which is the ODBC name, and it can be anything, as long as you use this in ORACLE_DSN too (please don't use whitespace, colons, semicolons and/or slashes. "rhost" is the hostname of where the DB is running, and "odbctest" is available on "rhost". To check that, run "lsnrctl services" on "rhost". Set the environment (TWO_TASK is not needed) > setenv LD_LIBRARY_PATH /usr/lib/oracle/11.1.0.1/client/lib > setenv TNS_ADMIN /usr/lib/oracle/11.1.0.1/admin > setenv ORACLE_HOME /usr/lib/oracle/11.1.0.1/client > setenv ORACLE_DSN dbi:Oracle:ODBCO > setenv ORACLE_USERID ORAUSER/ORAPASS Check if the connection works: > isql -v ODBCO And for Oracle: > sqlplus ORAUSER/ORAPASS@ODBCO and > sqlplus ORAUSER/ORAPASS@rhost/odbctest should both work Note by JPS: Merijn patched the trunk version of Makeifle.PL to account for the above it will be in release 1.22 -------- Original Message -------- Subject: DBD::Oracle 64-bit success story From: "QiangLi" Date: Thu, March 6, 2008 5:25 pm To: pause@pythian.com Priority: Normal hi, thanks for maintaining DBD::Oracle. I have installed DBD::Oracle against 64-bit oracle 10g on a 64-bit solaris machine. maybe worth another entry for the README.64bit.txt file. i am using gcc from sun freesoftware and also SUNWbinutils which contains the gas (gnu assembler) here is the steps with comment: # set install target % /usr/perl5/5.8.4/bin/perlgcc Makefile.PL PREFIX=/var/tmp/lib # since our perl is 32-bit, we can't build it against a 64bit oracle install. # edit Makefile and change reference to oracle's "lib/" to "lib32/" % perl -pi -e 's/oracle_home\/lib/oracle_home\/lib32/g' Makefile % perl -pi -e 's/oracle_home\/rdbms\/lib/oracle_home\/rdbms\/lib32/g' Makefile % make # ignore error like ORA-12162: TNS:net service name is incorrectly specified... % make test % make install # does it work. % perl -I'/var/tmp/lib/lib/site_perl/5.8.4/sun4-solaris-64int/' -MDBD::Oracle -e1 cheers, Qiang -------- Original Message -------- Subject: Tip: Compiling 32bit modules against 64bit Oracle 10g on solaris Date: Thu, 1 Nov 2007 16:41:28 -0400 From: Edgecombe, Jason To: CC: Hi There, I just wanted to thank both of you. The tip from cartmanltd@hotmail.com was the trick for getting DBD::Oracle compiled in 32bit format against the Oracle 10g client on solaris. Here was the command that worked: perl Makefile.PL -m $ORACLE_HOME/rdbms/demo/demo_rdbms32.mk Even though the tip was for aix, it fixed my build issue on solaris 9 (sparc) I've been banging my head on this problem for a few days. Thanks, Jason Jason Edgecombe Solaris & Linux Administrator Mosaic Computing Group, College of Engineering UNC-Charlotte Phone: (704) 687-3514 Source:Tom Reinertson Platform:Amd64 OS:Gentoo-amd64 The following instructions work for dbd::oracle 1.19 on a gentoo-amd64 installation. 1) install the oracle libraries Strictly speaking you only need dev-db/oracle-instantclient-basic for dbd::oracle, but i always like to have sql*plus lying around, which requires the basic package, so i just install sql*plus. emerge dev-db/oracle-instantclient-sqlplus which also pulls in dev-db/oracle-instantclient-basic. these packages are fetch restricted so you will be required to follow the download instructions. following these instructions, you should have retrieved these packages: instantclient-basic-linux-x86-64-10.2.0.3-20070103.zip instantclient-sdk-linux-x86-64-10.2.0.3-20070103.zip instantclient-sqlplus-linux-x86-64-10.2.0.3-20070103.zip now move them into the /usr/portage/distfiles directory. you should now be able to emerge dev-db/oracle-instantclient-sqlplus. 2) install DBD::Oracle issue the command: perl -MCPAN -e'install DBD::Oracle' this fails with the following error: x86_64-pc-linux-gnu-gcc: unrecognized option '-wchar-stdc++' x86_64-pc-linux-gnu-gcc: unrecognized option '-cxxlib-gcc' cc1: error: /ee/dev/bastring.h: No such file or directory find the offending files in your cpan directory: {~/.cpan/build/DBD-Oracle-1.19} grep -lr cxxlib * Makefile blib/arch/auto/DBD/Oracle/mk.pm mk.pm edit these files and remove the two invalid options and the include of bastring.h. now build the module: perl Makefile.PL -l make # make test generates lots of errors make test make install you should now be ready to run.