Re: install_driver(Oracle) failed: wrong ELF class: DynaLoader.pm



Hi Jonathan,

you saved my day!

as as workaround i wrote this shell skript:

LD_LIBRARY_PATH="/export/home/oracle/product/10.2.0/lib:/export/home/oracle/product/10.2.0/lib32"
export LD_LIBRARY_PATH
/oracle/dba/backup/ora19/DbOnline.pl ora19

and now it works. Thank you !

.... But this is a workaround i do not like very much. Reexecuting the skript might be a way (probably i will do this). Is there another possibility?

cu, Christian

Jonathan Leffler wrote:


On Wed, May 28, 2008 at 11:47 PM, Christian Merz <christian.merz@xxxxxxxxxxx <mailto:christian.merz@xxxxxxxxxxx>> wrote:

i set the environment in my skript, the libs are installed correctly
- or the script won't run interactively.


I'm not the Oracle expert - treat what I say with a pinch of salt.

I do use Solaris 10 quite a lot, though - it's my main development platform.

LD_LIBRARY_PATH must be set before ld.so.1 runs (because ld.so.1 reads the env var just once and ignores any subsequent changes to it), and ld.so.1 runs before Perl gets going. So, if your Perl script sets LD_LIBRARY_PATH, it is too late to influence ld.so.1 (and dlopen() etc). I've proved that the hard way - with SUID programs and dlopen() function calls in the mix too.

Try modifying your cron job so that it runs a shell script which sets at least LD_LIBRARY_PATH before invoking perl at all (use exec perl ...). I suspect it will work better then. If that isn't feasible (for some brain-dead administrative nightmare of a reason), then try having the Perl code set LD_LIBRARY_PATH and then re-exec itself. I've seen that work too. Weird stuff. The hard part is making sure that the re-exec happens just once!

On the other hand, this may still be off-target. But 'stuff works at command line and not when run by cron or web server' almost always ends up as 'the problem is environment'.


so, there is a problem with the environment but i cannot see it. is
there something important besides @INC and %ENV?

i already tried both versions of LD_LIBRARY_PATH
/oracle/product/10.2.0/lib:/oracle/product/10.2.0/lib32
/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/lib
(as Alexander Alekseev <alex@xxxxxxxxxx <mailto:alex@xxxxxxxxxx>>
suggested)

here are full outputs of my %ENV.

----------
1. interactively - runs ok
CLASSPATH ->
:/oracle/product/10.2.0/classes/oracle:/oracle/product/10.2.0/jlib:/oracle/product/10.2.0/lib
EDITOR -> vi
HOME -> /export/home/oracle
LD_LIBRARY_PATH ->
/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/lib
LOGNAME -> oracle
MAIL -> /usr/mail/oracle
MANPATH -> /usr/share/man:/opt/nsr/man
NLS_LANG -> AMERICAN_AMERICA.WE8DEC
OLDPWD -> /export/home/oracle
ORACLE_BASE -> /oracle
ORACLE_HOME -> /oracle/product/10.2.0
ORACLE_PATH -> /oracle/product/10.2.0/bin
ORACLE_SID -> ora19
ORA_NLS10 -> /oracle/product/10.2.0/nls/data
PATH -> /oracle/product/10.2.0/bin:/usr/ccs/bin:/usr/bin:/bin
PS1 -> db03:oracle:[$ORACLE_SID]$PWD >
PWD -> /oracle/dba/backup/ora19
SHELL -> /bin/ksh
SHLVL -> 1
SSH_CLIENT -> 10.1.3.132 <http://10.1.3.132> 55755 22
SSH_CONNECTION -> 10.1.3.132 <http://10.1.3.132> 55755
194.246.199.137 <http://194.246.199.137> 22
SSH_TTY -> /dev/pts/2
TERM -> xterm
TNS_ADMIN -> /oracle/product/10.2.0/network/admin
TZ -> MET
USER -> oracle
_ -> ./DbOnline.pl

----------
2. as cron job - with 'wrong ELF error'
CLASSPATH ->
/oracle/product/10.2.0/classes/oracle:/oracle/product/10.2.0/jlib:/oracle/product/10.2.0/lib:/oracle/product/10.2.0/classes/oracle:/oracle/product/10.2.0/jlib:/oracle/product/10.2.0/lib
HOME -> /export/home/oracle
LD_LIBRARY_PATH ->
/oracle/product/10.2.0/lib32:/oracle/product/10.2.0/lib
LOGNAME -> oracle
NLS_LANG -> AMERICAN_AMERICA.WE8DEC
ORACLE_HOME -> /oracle/product/10.2.0
ORACLE_SID -> ora19
ORA_NLS10 -> /oracle/product/10.2.0/nls/data
PATH -> /oracle/product/10.2.0/bin:/usr/ccs/bin:/usr/bin:/bin
SHELL -> /usr/bin/sh
TZ -> MET
----------
install_driver(Oracle) failed: Can't load
'/usr/perl5/site_perl/5.8.4/sun4-solaris-64int/auto/DBD/Oracle/Oracle.so'
for module DBD::Oracle: ld.so.1: perl: fatal:
/oracle/product/10.2.0/lib/libclntsh.so.10.1: wrong ELF class:
ELFCLASS64 at /usr/perl5/5.8.4/lib/sun4-solaris-64int/DynaLoader.pm
line 230.
at (eval 7) line 3
Compilation failed in require at (eval 7) line 3.
Perhaps a required shared library or dll isn't installed where expected
at /oracle/dba/backup/ora19/DbOnline.pl line 514

Jonathan Leffler wrote:

On Wed, May 28, 2008 at 8:30 AM, Christian Merz
<christian.merz@xxxxxxxxxxx <mailto:christian.merz@xxxxxxxxxxx>
<mailto:christian.merz@xxxxxxxxxxx
<mailto:christian.merz@xxxxxxxxxxx>>> wrote:

i wrote a skript which works fine for several Oracle Versions on
several platforms (linux, solarias 8/9).

if i run that script ineractively on solaris 10 it also works
fine.

if i run it as a cron job i get:

cron does not set the environment, so you must do so for it.

install_driver(Oracle) failed: Can't load
'/usr/perl5/site_perl/5.8.4/sun4-solaris-64int/auto/DBD/Oracle/Oracle.so'
for module DBD::Oracle: ld.so.1: perl: fatal:
/oracle/product/10.2.0/lib/libclntsh.so.10.1: wrong ELF class:
ELFCLASS64 at
/usr/perl5/5.8.4/lib/sun4-solaris-64int/DynaLoader.pm
line 230.
at (eval 8) line 3
Compilation failed in require at (eval 8) line 3.
Perhaps a required shared library or dll isn't installed
where expected

32-bit Client library - 64-bit Perl - won't work.

Install 32-bit Perl or 64-bit client libraries.

Or just set the environment.




--
Jonathan Leffler <jonathan.leffler@xxxxxxxxx <mailto:jonathan.leffler@xxxxxxxxx>> #include <disclaimer.h>
Guardian of DBD::Informix - v2008.0513 - http://dbi.perl.org
"Blessed are we who can laugh at ourselves, for we shall never cease to be amused."
.



Relevant Pages

  • Re: install_driver(Oracle) failed: wrong ELF class: DynaLoader.pm
    ... I'm not the Oracle expert - treat what I say with a pinch of salt. ... So, if your Perl script sets LD_LIBRARY_PATH, ... Try modifying your cron job so that it runs a shell script which sets at ...
    (perl.dbi.users)
  • install_driver(Oracle) failed: wrong ELF class: DynaLoader.pm
    ... i wrote a skript which works fine for several Oracle Versions on several platforms ... if i run that script ineractively on solaris 10 it also works fine. ... $ perl -V ...
    (perl.dbi.users)
  • Re: oracle output to excel
    ... mailed to client.I want autoamtic process for that just like cron job. ... I am using Oracle 9i on Linux ... One word: Perl ...
    (comp.databases.oracle.misc)
  • Re: oracle output to excel
    ... mailed to client.I want autoamtic process for that just like cron job. ... I am using Oracle 9i on Linux ... One word: Perl ... Sybrand Bakker, Senior Oracle DBA ...
    (comp.databases.oracle.misc)
  • Re: utf8-Ausgabe in CGI Skripten
    ... CGI-Script schreiben, welches die Ausgabe im utf-8-Format vornimmt. ... Das Skript würde ich dann mit Perl v5.8.8 schreiben. ... Perl schaut nach, was das OS denn so als default für stdout annimmt und konvertiert stdout entsprechend. ...
    (de.comp.lang.perl.cgi)