Meldung: Goto undefined subroutine &DynaLoader::bootstrap_inheritat .../XSLoader.pm line 96
Meldung: Goto undefined subroutine &DynaLoader::bootstrap_inheritat .../XSLoader.pm line 96
am 27.12.2006 12:49:23 von Bianka Martinovic
Hallo Perlen ;)
ich habe auf mehreren Webservern das gleiche Problem, daher nehme ich
an, dass der Fehler bei mir liegt. Ich finde ihn nur leider nicht. :(
Ich programmiere eine Webanwendung und habe nun einen ersten "Rumpf" auf
drei Webservern bei drei verschiedenen Providern installiert. Für meine
Konfigurationsdateien wollte ich YAML verwenden. Da auf keinem der
Webserver das YAML-Modul installiert ist, habe ich es in ein lokales
Verzeichnis installiert, was bei mir lokal unter Windows auch problemlos
funktioniert.
Auf den drei Webservern kommt aber übereinstimmend die Fehlermeldung:
Goto undefined subroutine &DynaLoader::bootstrap_inherit at
/usr/lib/perl5/5.8.7/i586-linux-thread-multi/XSLoader.pm line 96
Verwendet wird der DynaLoader offenbar nur im Module Params::Validate,
welches ich wiederum für ein anderes Modul (Log::Dispatch) benötige.
Der Versuch, die Module XSLoader und DynaLoader ebenfalls lokal (in
aktuellster Version) zu installieren, hat keine Abhilfe gebracht.
Scheinbar gibt es da eine Art Versionskonflikt, den ich ja sehr gern
beheben würde, aber alles Gebastel hat nix gebracht.
Die Perl-Versionen der Server:
v5.6.1 built for i386-linux
v5.8.7 built for i586-linux-thread-multi
v5.8.4 built for i386-linux-thread-multi
Es sind also ganz unterschiedliche Versionen, allerdings immer Linux.
Ich wäre sehr froh, wenn mir jemand weiterhelfen könnte. :-)
Gruß, Bianka
Re: Meldung: Goto undefined subroutine &DynaLoader::bootstrap_inherit at .../XSLoader.pm line 9
am 27.12.2006 14:45:21 von Frank Seitz
Bianka Martinovic wrote:
> Hallo Perlen ;)
Hmmmm..., hallo Perle ;)
> Auf den drei Webservern kommt aber übereinstimmend die Fehlermeldung:
>
> Goto undefined subroutine &DynaLoader::bootstrap_inherit at
> /usr/lib/perl5/5.8.7/i586-linux-thread-multi/XSLoader.pm line 96
Bei mir (Perl 5.8.6) lautet die Codestelle in XSLoader.pm:
retry:
require DynaLoader;
goto &DynaLoader::bootstrap_inherit;
DynaLoader ist also da (sonst würde require eine Exception werfen),
aber die Subroutine bootstrap_inherit() ist laut Fehlermeldung nicht
definiert. Wenn ich bei mir in DynaLoader.pm reinschaue,
finde ich dort die Definition:
sub bootstrap_inherit {
my $module = $_[0];
local *isa = *{"$module\::ISA"};
local @isa = (@isa, 'DynaLoader');
# Cannot goto due to delocalization. Will report errors on a wrong line?
bootstrap(@_);
}
(Was sie tut, ist egal, die Subroutine ist jedenfalls da.)
Was Du beobachtest ist also komisch. Prüfe doch
mal, welches DynaLoader.pm bei Dir geladen wird und was da drin steht.
DynaLoader und XSLoader gehören zum Perl-Core
und sollten daher normalerweise zusammenpassen.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Meldung: Goto undefined subroutine &DynaLoader::bootstrap_inherit at .../XSLoader.pm line
am 27.12.2006 15:26:27 von Bianka Martinovic
Hallo Frank.
Frank Seitz schrieb:
> Bei mir (Perl 5.8.6) lautet die Codestelle in XSLoader.pm:
>
> retry:
> require DynaLoader;
> goto &DynaLoader::bootstrap_inherit;
Ja, so weit war ich auch schon. ;-) Meine XSLoader sieht da genauso aus.
Der Zugriff auf Core-Module ist auf Webservern bei Providern aber in der
Regel nicht möglich, somit fällt Nachgucken aus.
Ich bin jetzt allerdings einen Schritt weiter, obwohl ich noch immer
nicht wirklich weiß, was nun eigentlich das Problem war/ist.
Hintergrund: Ich habe ein "Serializer"-Modul geschrieben, das versucht,
als eine Art Wrapper zunächst YAML::Syck zu laden. Schlägt das fehl,
lädt es das langsamere YAML. (Code unten.) Letzteres läßt sich
"normalerweise" ins eigene cgi-bin installieren, weil es ja "pure Perl"
ist. (Daher auch langsamer.) In letzter Instanz sollte es dann
Data::Dumper laden; die Konfigurationsdateien hätten dann syntaktisch
entsprechend anders ausgesehen, was auch der Teil ist, der mir nicht
gefiel. *smile*
Die "Wrapper-Funktionen" wurden alle als Typeglob im BEGIN-Block
definiert, was ich, wie ich ehrlicherweise zugeben muß, bei Jifty
abgeschaut habe. ;) Damit tritt dann das Problem auf - übrigens auch bei
Data::Dumper!
Nun habe ich einfach den kompletten Block statt als BEGIN {} in einer
sub stehen, die ich gezielt aufrufe, und siehe da - nun geht's.
*kopfkratz* Ich weiß jetzt nicht wirklich, was ich davon halten soll;
vielleicht hat man an der Stelle irgendwie eine Art Henne-Ei-Problem
oder muß irgendwas - wie den DynaLoader - mit "use" einbinden.
Na, wie dem auch sei, ich habe jetzt zumindest einen Workaround. Sollte
trotzdem jemand eine Erklärung wissen, wäre ich an dieser aber nach wie
vor interessiert. :)
Gruß, Bianka
Das hier stand vorher im BEGIN {} und verursachte das Problem; abgeguckt
aus Jifty::YAML.
if ( eval { require YAML::Syck; YAML::Syck->VERSION(0.27) } ) {
*Load = *YAML::Syck::Load;
require YAML;
*Dump = *YAML::Dump;
*LoadFile = *YAML::Syck::LoadFile;
*DumpFile = *YAML::Syck::DumpFile;
} else {
if ( eval { require YAML; } ) {
*Load = *YAML::Load;
*Dump = *YAML::Dump;
*LoadFile = *YAML::LoadFile;
*DumpFile = *YAML::DumpFile;
}
}
Re: Meldung: Goto undefined subroutine &DynaLoader::bootstrap_inherit at .../XSLoader.pm li
am 27.12.2006 15:57:15 von Frank Seitz
Bianka Martinovic wrote:
> Der Zugriff auf Core-Module ist auf Webservern bei Providern aber in der
> Regel nicht möglich, somit fällt Nachgucken aus.
Lesen solltest Du sie schon können, sonst könnte Perl es auch nicht.
> Das hier stand vorher im BEGIN {} und verursachte das Problem; abgeguckt
> aus Jifty::YAML.
>
> if ( eval { require YAML::Syck; YAML::Syck->VERSION(0.27) } ) {
>
> *Load = *YAML::Syck::Load;
>
> require YAML;
> *Dump = *YAML::Dump;
> *LoadFile = *YAML::Syck::LoadFile;
> *DumpFile = *YAML::Syck::DumpFile;
>
> } else {
>
> if ( eval { require YAML; } ) {
>
> *Load = *YAML::Load;
> *Dump = *YAML::Dump;
> *LoadFile = *YAML::LoadFile;
> *DumpFile = *YAML::DumpFile;
>
> }
> }
Bist Du sicher, dass Du im richtigen Namespace herumhuberst?
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Meldung: Goto undefined subroutine &DynaLoader::bootstrap_inherit at .../XSLoader.pm
am 27.12.2006 16:19:27 von Bianka Martinovic
Frank Seitz schrieb:
> Lesen solltest Du sie schon können, sonst könnte Perl es auch nicht.
Ja, aber ohne Konsole nur mit Aufwand. ;)
> Bist Du sicher, dass Du im richtigen Namespace herumhuberst?
Ha jo.
Gruß, Bianka