Dynamic Loading
am 18.03.2007 13:31:38 von Lutz Frommberger
Hi,
ich habe _null_ Ahnung von Perl. Ich brauche kurz Hilfe:
Ich brauche für eine Applikation Compress::Zlib. Jetzt habe ich folgendes
Perl-"Skript" für den Test erstellt:
use File::Find;
use Archive::Zip;
use Compress::Zlib;
Dabei benötigt Archive::Zip bereits Compress::Zlib.
Ich bekomme folgende Fehlermeldung:
Can't load module Compress::Zlib, dynamic loading not available in this
perl.
(You may need to build a new perl executable which either supports
dynamic loading or has the Compress::Zlib module statically linked into it.)
at /opt/lib/perl5/site_perl/5.8.8/Archive/Zip.pm line 24
Kann das sein? Wenn dynamic loading doch nicht dabei ist, wie kann er dann
problemlos File::Find und Archive::Zip laden, um dann bei Compress:Zlib
auszusteigen?
Was kann das noch für Ursachen haben?
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 14:38:56 von Mirco Wahab
Lutz Frommberger wrote:
> Ich brauche für eine Applikation Compress::Zlib. Jetzt habe ich folgendes
> Perl-"Skript" für den Test erstellt:
>
> use File::Find;
> use Archive::Zip;
> use Compress::Zlib;
>
> Dabei benötigt Archive::Zip bereits Compress::Zlib.
> Ich bekomme folgende Fehlermeldung:
>
> Can't load module Compress::Zlib, dynamic loading not available in this
> perl.
> (You may need to build a new perl executable which either supports
> dynamic loading or has the Compress::Zlib module statically linked into it.)
> at /opt/lib/perl5/site_perl/5.8.8/Archive/Zip.pm line 24
>
> Kann das sein? Wenn dynamic loading doch nicht dabei ist, wie kann er dann
> problemlos File::Find und Archive::Zip laden, um dann bei Compress:Zlib
> auszusteigen?
>
> Was kann das noch für Ursachen haben?
Archive::Zip ist nur ein Interface, lädt nichts
ausser eben Compress::Zlib.
Was ist das für eine Umgebung, die keine objekte
dynamisch lädt? ist das eine perl58.lib die
statisch in eine Applikations gelinkt ist?
Wenn das so ist, kann man die auch leicht
"dynamisch laden" lassen, sofern man
auf den Quelltext der Anwendung zugriff
hat.
Viele GrüÃe
Mirco
Re: Dynamic Loading
am 18.03.2007 14:41:37 von Slaven Rezic
Lutz Frommberger writes:
> Hi,
>
> ich habe _null_ Ahnung von Perl. Ich brauche kurz Hilfe:
>
> Ich brauche für eine Applikation Compress::Zlib. Jetzt habe ich folgendes
> Perl-"Skript" für den Test erstellt:
>
> use File::Find;
> use Archive::Zip;
> use Compress::Zlib;
>
> Dabei benötigt Archive::Zip bereits Compress::Zlib.
> Ich bekomme folgende Fehlermeldung:
>
> Can't load module Compress::Zlib, dynamic loading not available in this
> perl.
> (You may need to build a new perl executable which either supports
> dynamic loading or has the Compress::Zlib module statically linked into it.)
> at /opt/lib/perl5/site_perl/5.8.8/Archive/Zip.pm line 24
>
> Kann das sein? Wenn dynamic loading doch nicht dabei ist, wie kann er dann
> problemlos File::Find und Archive::Zip laden, um dann bei Compress:Zlib
> auszusteigen?
>
> Was kann das noch für Ursachen haben?
>
File::Find und Archive::Zip sind pure-perl-Module, während
Compress::Zlib eine kompilierte XS-Komponente hat, die typischerweise
dynamisch eingebunden wird, je nach Plattform als .so oder .dll.
--
Slaven Rezic - slaven rezic de
Dump a Tk canvas as an xfig file:
http://search.cpan.org/search?mode=module&query=Tk::CanvasFi g
Re: Dynamic Loading
am 18.03.2007 14:53:39 von Lutz Frommberger
Slaven Rezic wrote:
> File::Find und Archive::Zip sind pure-perl-Module, während
> Compress::Zlib eine kompilierte XS-Komponente hat, die typischerweise
> dynamisch eingebunden wird, je nach Plattform als .so oder .dll.
Argh. Ok. Mist. Danke.
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 14:57:34 von Lutz Frommberger
Mirco Wahab wrote:
> Archive::Zip ist nur ein Interface, lädt nichts
> ausser eben Compress::Zlib.
Achso.
> Was ist das für eine Umgebung, die keine objekte
> dynamisch lädt? ist das eine perl58.lib die
> statisch in eine Applikations gelinkt ist?
Das ist so ein MIPS-Kistchen...
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=linux, osvers=2.4.20, archname=mipsel-linux
uname='linux oleo 2.4.20 #61 mon oct 9 21:51:36 msd 2006 mips gnulinux '
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Beantwortet das die Frage?
> Wenn das so ist, kann man die auch leicht
> "dynamisch laden" lassen, sofern man
> auf den Quelltext der Anwendung zugriff
> hat.
Den Quelltext (also das, was Compress::Zlib habe will) habe ich
vorliegen, ja. Den von Perl nicht. Kann man da was machen?
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 15:02:33 von Lutz Frommberger
Lutz Frommberger wrote:
> Beantwortet das die Frage?
Vielleicht hilft das noch:
Characteristics of this binary (from libperl):
Compile-time options: PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 15:54:24 von Mirco Wahab
Lutz Frommberger wrote:
> Das ist so ein MIPS-Kistchen...
> Den Quelltext (also das, was Compress::Zlib habe will) habe ich
> vorliegen, ja. Den von Perl nicht. Kann man da was machen?
>
Aha. Da kann ich Dir nicht weiterhelfen.
ist denn das Archive::Zip regelrecht
installiert worden? Benutzt das perl
dort tatsächlich die @Lib-Pfade, die
zu seiner Installation gehören?
Viele GrüÃe
M.
Re: Dynamic Loading
am 18.03.2007 16:06:30 von Lutz Frommberger
Mirco Wahab wrote:
> ist denn das Archive::Zip regelrecht
> installiert worden?
Alles über ipkg.
> Benutzt das perl dort tatsächlich die @Lib-Pfade, die zu seiner
> Installation gehören?
Das da?
@INC:
/opt/lib/perl5/5.8.8/mipsel-linux
/opt/lib/perl5/5.8.8
/opt/lib/perl5/site_perl/5.8.8/mipsel-linux
/opt/lib/perl5/site_perl/5.8.8
/opt/lib/perl5/site_perl
Sieht für mich gut aus. Compress::Zlib liegt da.
Ich wundere mich nur, warum Compress::Zlib in dem ipkg-Archiv überhaupt
geführt wird, wenn das dort angebotene Perl damit gar nichs anfangen
kann.
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 16:10:15 von hjp-usenet2
On 2007-03-18 13:57, Lutz Frommberger wrote:
> Mirco Wahab wrote:
>> Was ist das für eine Umgebung, die keine objekte
>> dynamisch lädt? ist das eine perl58.lib die
>> statisch in eine Applikations gelinkt ist?
>
> Das ist so ein MIPS-Kistchen...
>
> Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
> Platform:
> osname=linux, osvers=2.4.20, archname=mipsel-linux
> uname='linux oleo 2.4.20 #61 mon oct 9 21:51:36 msd 2006 mips gnulinux '
> config_args=''
> hint=recommended, useposix=true, d_sigaction=define
> usethreads=undef use5005threads=undef useithreads=undef
> usemultiplicity=undef
> useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
> use64bitint=undef use64bitall=undef uselongdouble=undef
> usemymalloc=n, bincompat5005=undef
>
> Beantwortet das die Frage?
Eigentlich nicht wirklich. Linux sollte auch auf MIPS Dynamic Linking
beherrschen. Und die Perl-Version schaut deutlich neuer aus als der
Kernel. Hat da mal jemand nachträglich Perl drauf installiert, und dabei
Dynamic Linking disabled?
>> Wenn das so ist, kann man die auch leicht "dynamisch laden" lassen,
>> sofern man auf den Quelltext der Anwendung zugriff hat.
>
> Den Quelltext (also das, was Compress::Zlib habe will) habe ich
> vorliegen, ja. Den von Perl nicht. Kann man da was machen?
Der von Perl ist auf cpan.perl.org zu finden.
hp
--
_ | Peter J. Holzer | Blaming Perl for the inability of programmers
|_|_) | Sysadmin WSR | to write clearly is like blaming English for
| | | hjp@hjp.at | the circumlocutions of bureaucrats.
__/ | http://www.hjp.at/ | -- Charlton Wilbur in clpm
Re: Dynamic Loading
am 18.03.2007 16:38:27 von Lutz Frommberger
Peter J. Holzer wrote:
> Eigentlich nicht wirklich. Linux sollte auch auf MIPS Dynamic Linking
> beherrschen. Und die Perl-Version schaut deutlich neuer aus als der
> Kernel. Hat da mal jemand nachträglich Perl drauf installiert
Ja, ich. :-) Aber vorkompiliert per ipkg aus einem mir unbekannten Archiv.
> und dabei Dynamic Linking disabled?
Wie kriegt man das denn raus, ob das Perl das kann oder nicht?
> Der von Perl ist auf cpan.perl.org zu finden.
Es scheitert bei mir am fehlenden Compiler.
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 16:49:28 von hjp-usenet2
On 2007-03-18 15:06, Lutz Frommberger wrote:
> Mirco Wahab wrote:
>> ist denn das Archive::Zip regelrecht installiert worden?
>
> Alles über ipkg.
Klingt nach Handheld oder Router. Da wird häufig aus Platz- und
Performance-Gründen auf alles mögliche verzichtet, was auf Desktops und
Servern üblich ist. Kann gut sein, dass Dynamic Libraries dazugehören.
> Ich wundere mich nur, warum Compress::Zlib in dem ipkg-Archiv überhaupt
> geführt wird, wenn das dort angebotene Perl damit gar nichs anfangen
> kann.
Das musst Du allerdings denjenigen fragen, der das ipkg-Archiv erstellt
hat. Wir können das nicht wissen, vor allem, nachdem Du uns bisher noch
nicht mal verraten hast, um welches Archiv es sich handelt.
hp
--
_ | Peter J. Holzer | Blaming Perl for the inability of programmers
|_|_) | Sysadmin WSR | to write clearly is like blaming English for
| | | hjp@hjp.at | the circumlocutions of bureaucrats.
__/ | http://www.hjp.at/ | -- Charlton Wilbur in clpm
Re: Dynamic Loading
am 18.03.2007 17:14:37 von Christian Winter
Lutz Frommberger schrieb:
> Peter J. Holzer wrote:
>> und dabei Dynamic Linking disabled?
>
> Wie kriegt man das denn raus, ob das Perl das kann oder nicht?
"man file"
h64183:~ # file /usr/bin/perl
/usr/bin/perl: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
for GNU /Linux 2.2.5, dynamically linked (uses shared libs), not
stripped
-Christian
Re: Dynamic Loading
am 18.03.2007 17:25:15 von hjp-usenet2
On 2007-03-18 15:38, Lutz Frommberger wrote:
> Peter J. Holzer wrote:
>> Eigentlich nicht wirklich. Linux sollte auch auf MIPS Dynamic Linking
>> beherrschen. Und die Perl-Version schaut deutlich neuer aus als der
>> Kernel. Hat da mal jemand nachträglich Perl drauf installiert
>
> Ja, ich. :-) Aber vorkompiliert per ipkg aus einem mir unbekannten Archiv.
>
>> und dabei Dynamic Linking disabled?
>
> Wie kriegt man das denn raus, ob das Perl das kann oder nicht?
Gute Frage, ich ich habe hier kein Perl ohne Dynamic Linking und bin zu
faul, extra eines zu compilieren, aber wenn in der Ausgabe von perl -V
der Abschnitt:
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
fehlt, dann ist das ein guter Hinweis.
hp
--
_ | Peter J. Holzer | Blaming Perl for the inability of programmers
|_|_) | Sysadmin WSR | to write clearly is like blaming English for
| | | hjp@hjp.at | the circumlocutions of bureaucrats.
__/ | http://www.hjp.at/ | -- Charlton Wilbur in clpm
Re: Dynamic Loading
am 18.03.2007 18:18:09 von hjp-usenet2
On 2007-03-18 16:14, Christian Winter wrote:
> Lutz Frommberger schrieb:
>> Peter J. Holzer wrote:
>>> und dabei Dynamic Linking disabled?
>>
>> Wie kriegt man das denn raus, ob das Perl das kann oder nicht?
>
> "man file"
>
> h64183:~ # file /usr/bin/perl
> /usr/bin/perl: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
> for GNU /Linux 2.2.5, dynamically linked (uses shared libs), not
> stripped
Das scheint mir eine sehr unsichere Methode zu sein: Ob perl shared
Libraries laden kann hat wenig damit zu tun, ob es selbst dynamically
linked ist - alle vier Kombinationen sind hier möglich.
hp
--
_ | Peter J. Holzer | Blaming Perl for the inability of programmers
|_|_) | Sysadmin WSR | to write clearly is like blaming English for
| | | hjp@hjp.at | the circumlocutions of bureaucrats.
__/ | http://www.hjp.at/ | -- Charlton Wilbur in clpm
Re: Dynamic Loading
am 18.03.2007 19:53:54 von Lutz Frommberger
Peter J. Holzer wrote:
> Gute Frage, ich ich habe hier kein Perl ohne Dynamic Linking und bin zu
> faul, extra eines zu compilieren, aber wenn in der Ausgabe von perl -V
> der Abschnitt:
>
> Dynamic Linking:
> dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
> cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
>
> fehlt, dann ist das ein guter Hinweis.
Er fehlt nicht, aber
Dynamic Linking:
dlsrc=dl_none.xs, dlext=none, d_dlsymun=undef, ccdlflags='
-fexpensive-optimizations -fomit-frame-pointer'
cccdlflags=' -fexpensive-optimizations -fomit-frame-pointer',
lddlflags=''
interpretiere ich als negativen Bescheid.
Dann wäre das geklärt. Vielen Dank allen Helfenden, ich habe wieder
was gelernt. Ich werde wohl mal rauskriegen müssen, wer dieses
Archiv verwaltet und um ein anderes Perl bitten.
gruÃ,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Re: Dynamic Loading
am 18.03.2007 20:24:21 von Florian Weimer
* Peter J. Holzer:
> Das scheint mir eine sehr unsichere Methode zu sein: Ob perl shared
> Libraries laden kann hat wenig damit zu tun, ob es selbst
> dynamically linked ist - alle vier Kombinationen sind hier möglich.
dlopen funktioniert bei der statisch gelinkten GNU libc nicht so
richtig. Es gibt also nur drei Kombinationen, von denen aber die zwei
interessanteren sich immer noch nicht mit file unterscheiden lassen.
Re: Dynamic Loading
am 19.03.2007 12:54:15 von Ferry Bolhar
Lutz Frommberger:
> Can't load module Compress::Zlib, dynamic loading not available in this
> perl.
> Kann das sein? Wenn dynamic loading doch nicht dabei ist, wie kann er dann
> problemlos File::Find und Archive::Zip laden, um dann bei Compress:Zlib
> auszusteigen?
Manche Module bestehen aus zwei Teilen - der normalen .pm Datei,
die den Perl-Code des Moduls enthält, und aus einer Datei, die
kompilierten (C)-Code enthält. Unter UNIX ist das meistens eine .so
Datei, unter Windows eine .dll. Wenn das Modul mit "use" geladen
wird, wird die .pm Datei normal eingelesen und verarbeitet. In dieser
Datei finden sich dann meistens Anweisungen wie
package MyModule;
require DynaLoader; # oder XSLoader
@ISA = qw(DynaLoader);
bootstrap MyModule; # oder XSLoader::load 'MyModule';
Die bootstrap() bzw. XSLoader::load() Funktion "lädt" nun die
..so oder .dll Datei in den Perl-Core. Dabei werden die in dieser
Datei einkompilierten C-Funktionen als Perl-Funktionen verfügbar
gemacht. Das muss der Perl-Core aber auch unterstützen, und
genau das tut er in deinem Fall nicht. Daher wird durch den Aufruf
von bootstrap() bzw. load() diese Meldung ausgegeben und die
Verarbeitung abgebrochen.
Ohne jetzt auf die Details einzugehen: dein Perl unterstützt kein
dynamic Loading (d.h., das Hinzuladen von C-Code) und daher
kannst du Module, die es benötigen (Compress:Zlib tut das, weil
es seinerseits auf den Code der C Library /usr/lib/libz.so (oder
ähnlich) zugreift), nicht verwenden.
Probier ein:
perl -V|grep dlext
Das gibt die Extension von zuladbaren Code aus - wie gesagt,
meistens "so" oder "dll". Wenn hier nichts oder "none" steht
(und davon gehe ich nach deiner Beschreibung aus), dann hast
du leider Pech gehabt und musst dir ein anderes Perl besorgen
(würde ich auch tun, es gibt mittlerweile schon sehr viele Module,
die Dynamic Loading verwenden).
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at