fatal: relocation error: symbol dirty?


M

mkirsch1

I see lots of one-message threads for errors similar to this:

Can't load '/packages/perl/lib/perl5/site_perl/auto/DBI/DBI.so' for
module DBI: ld.so.1: perl: fatal: relocation error: file
/packages/perl/lib/perl5/site_perl/auto/DBI/DBI.so: symbol dirty:
referenced symbol not found at
/usr/perl5/5.8.4/lib/sun4-solaris-64int/DynaLoader.pm line 230.
at /packages/perl/lib/perl5/site_perl/DBI.pm line 168
BEGIN failed--compilation aborted at
/packages/perl/lib/perl5/site_perl/DBI.pm line 168.
Compilation failed in require at ./dbi_simple.pl line 4.
BEGIN failed--compilation aborted at ./dbi_simple.pl line 4.

But, no answers. Please tell me someone knows, as a general
explanation, what is going on here, and can explain it to me. If I had
an explanation of what the error message means on a generic level, I
could probably figure out what's wrong and fix it.

Situation: I have DBI and DBD-Oracle loaded in a non-standard location.
They're "compiled" for Solaris 8 (perl 5.005), and we're trying to use
them on Solaris 10 (perl 5.8.4) boxes. The above error message is what
we get from this simple script:

#!/usr/bin/perl
use lib qw(/usr/perl5/5.00503/sun4-solaris /usr/perl5/5.00503
/usr/perl5/site_perl/5.005/sun4-solaris /usr/perl5/site_perl/5.005
/packages/perl/lib/perl5/site_perl);

use DBI;
use DBD::Oracle qw:)ora_types);

Recompiling the modules for Solaris 10 is not an option because we're
in a heterogenous environment, and production is still on Solaris 8.
 
Ad

Advertisements

I

Ilya Zakharevich

[A complimentary Cc of this posting was sent to

Can't load '/packages/perl/lib/perl5/site_perl/auto/DBI/DBI.so' for
module DBI: ld.so.1: perl: fatal: relocation error: file
/packages/perl/lib/perl5/site_perl/auto/DBI/DBI.so: symbol dirty:
referenced symbol not found at
/usr/perl5/5.8.4/lib/sun4-solaris-64int/DynaLoader.pm line 230.
But, no answers. Please tell me someone knows, as a general
explanation, what is going on here, and can explain it to me.

Whoever wrote CRT library does not know how to write error messages.
The parsable error would look like this:

Can't load '/packages/perl/lib/perl5/site_perl/auto/DBI/DBI.so' for
module DBI: ld.so.1: perl: fatal: relocation error: file
/packages/perl/lib/perl5/site_perl/auto/DBI/DBI.so: symbol 'dirty':
referenced symbol not found at
/usr/perl5/5.8.4/lib/sun4-solaris-64int/DynaLoader.pm line 230.

Is it better this way? (DBI.so mentions `extern dirty' which can't be
found as an `extern' at runtime.) Most probably your Perl is not
compiled on the current machine, and its Config.pm contains junk.

Hope this helps,
Ilya
 
Ad

Advertisements

S

Sherm Pendley

Situation: I have DBI and DBD-Oracle loaded in a non-standard location.
They're "compiled" for Solaris 8 (perl 5.005), and we're trying to use
them on Solaris 10 (perl 5.8.4) boxes.

That's the problem, right there. Modules that include a compiled component
are not binary-compatible from one major version to the next. You'll need
to install them correctly on the Solaris 10 machine.
Recompiling the modules for Solaris 10 is not an option because we're
in a heterogenous environment

.... which Perl already understands and makes allowances for, by placing
architecture- and version-specific modules in their own subdirectory.

sherm--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top