OVH Cloud OVH Cloud

perl PAR et DLL

2 réponses
Avatar
lasconic
Bonjour a tous ...
Je suis nouveau ici ... comme dans perl ...
mais j'ai besoin d'un petit coup de main ... j'ai ecrit un script qui
utilise un module nommé Win32::Perms et je voudrais en faire un exe avec
PAR. Lorsque que je fais pp -o mon.exe mon.pl j'obtient un exe qui
plante lamentablement en me disant :
Can't locate loadacle object for module Win32::Perms in @INC (@INC
contains: CODE(0xb97eec) CODE(0xc8a99c) .) at ../blib/lib/PAR/Heavy.pm
line 78
Compilation failed in require at script/mon.pl line 10

Bien sur si je lance mon script avec perl mon.pl tout se passe bien ... :-(

des idées ? ? ? Merci bcp !

Lasconic

2 réponses

Avatar
jl_morel
Dans l'article <4034b2ef$0$29951$,
a dit...
... j'ai ecrit un script qui
utilise un module nommé Win32::Perms et je voudrais en faire un exe avec
PAR. Lorsque que je fais pp -o mon.exe mon.pl j'obtient un exe qui
plante lamentablement en me disant :
Can't locate loadacle object for module Win32::Perms in @INC (@INC
contains: CODE(0xb97eec) CODE(0xc8a99c) .) at ../blib/lib/PAR/Heavy.pm
line 78
Compilation failed in require at script/mon.pl line 10

Bien sur si je lance mon script avec perl mon.pl tout se passe bien ... :-(



Je crois bien que vous avez trouvé incidemment un bug (mineur) de PAR.

Le problème provient du fait qu'il n'arrive pas à charger la DLL Perms.dll
associée à Perms.pm

Elle est bien contenue dans l'exécutable (il suffit de compiler le script
avec l'option verbose (-v 5) pour faire afficher tous les modules inclus).

C'est la fonction bootstrap du module DynaLoader qui échoue. L'auteur du
module Win32::Perms, Dave Roth, est un original : il a nommé sa dll
Perms.DLL et non pas Perms.dll comme tout le monde !

Quand vous lancez votre script normalement, l'existence du fichier est
testée, donc pas de problème avec les majuscules. Quand c'est l'exécutable
compilé par pp qui tourne, le fichier Perms.dll est cherché dans la table
de tous les fichiers inclus, laquelle table contient Perms.DLL qui ne
correspond pas, d'où l'échec.

La solution est donc simple : vous allez avec l'explorateur dans le
répertoire qui contient la DLL, typiquement
C:perlsitelibautoWin32Perms
et vous renommez le fichier Perms.DLL en Perms.dll

(si le fichier est protégé en écriture : un clic droit sur le nom du
fichier > Propriétés > vous décochez l'attribut lecture seule)

Vous recompilez votre exécutable et ça devrait rouler tout seul.

--
J-L.M.

Avatar
lasconic
Jean-Louis MOREL wrote:
Dans l'article <4034b2ef$0$29951$,
a dit...

... j'ai ecrit un script qui
utilise un module nommé Win32::Perms et je voudrais en faire un exe avec
PAR. Lorsque que je fais pp -o mon.exe mon.pl j'obtient un exe qui
plante lamentablement en me disant :
Can't locate loadacle object for module Win32::Perms in @INC (@INC
contains: CODE(0xb97eec) CODE(0xc8a99c) .) at ../blib/lib/PAR/Heavy.pm
line 78
Compilation failed in require at script/mon.pl line 10

Bien sur si je lance mon script avec perl mon.pl tout se passe bien ... :-(




Je crois bien que vous avez trouvé incidemment un bug (mineur) de PAR.

Le problème provient du fait qu'il n'arrive pas à charger la DLL Perms.dll
associée à Perms.pm

Elle est bien contenue dans l'exécutable (il suffit de compiler le script
avec l'option verbose (-v 5) pour faire afficher tous les modules inclus).

C'est la fonction bootstrap du module DynaLoader qui échoue. L'auteur du
module Win32::Perms, Dave Roth, est un original : il a nommé sa dll
Perms.DLL et non pas Perms.dll comme tout le monde !

Quand vous lancez votre script normalement, l'existence du fichier est
testée, donc pas de problème avec les majuscules. Quand c'est l'exécutable
compilé par pp qui tourne, le fichier Perms.dll est cherché dans la table
de tous les fichiers inclus, laquelle table contient Perms.DLL qui ne
correspond pas, d'où l'échec.

La solution est donc simple : vous allez avec l'explorateur dans le
répertoire qui contient la DLL, typiquement
C:perlsitelibautoWin32Perms
et vous renommez le fichier Perms.DLL en Perms.dll

(si le fichier est protégé en écriture : un clic droit sur le nom du
fichier > Propriétés > vous décochez l'attribut lecture seule)

Vous recompilez votre exécutable et ça devrait rouler tout seul.



Bien vu ! ! !
MERCI BEAUCOUP ! ! ! Tout fonctionne !

Merci!
Lasconic