Compilation et déploiement d'un module Perl sous Windows

Le
Stephane Dupille
Bonjour,

J'ai une machine sur laquelle je dois déployer une appli Perl. J'ai
donc installé ActivePerl dessus. L'appli doit se connecter à une base
Ingres, et donc je dois utiliser le driver DBD::Ingres.
Malheureusement, ce module n'est pas disponible par PPM, je dois donc
le compiler à la main.

J'ai donc installé sur cette machine « Visual C++ 2005 Express
Edition », ainsi que le SDK pour le dev. La compilation se passe plus
ou moins bien (j'ai par exemple été obligé de patcher le Makefile
généré pour remplacer libc.lib par libcmt.lib, la première n'existant
plus). Bref, sur ma machine de dev, ce module marche correctement, les
tests passent avec succès, et mes scripts de tests maison ne détectent
pas d'anomalie.


Maintenant, je dois déployer Perl, et cette appli sur une autre
machine. Particularité : cette machine n'a pas d'accès Internet, entre
autres contraintes un peu chiantes. Afin de pouvoir automatiser ça le
plus possible, j'ai transféré simplement le répertoire C:Perl de ma
machine de dev vers la machine de test.

En faisant ça Perl fonctionne correctement, mais pas le module
DBD::Ingres. Quand j'essaye de l'utiliser, il me dit que MSVCR80.dll
est introuvable. Visiblement, il me faut un runtime. C'est bien la
peine de se faire chier à compiler un truc pas déployable. Est-ce
qu'il est possible de se passer du runtime ?

J'installe le runtime vcredist_x86.exe sur ma machine de test, je
relance mon appli, et ça me dit toujours que MSVCR80.dll est
introuvable. C'est pas ça qu'il fallait que j'installe ?

J'ai finit par copier le fichier MSVCR80.dll depuis le répertoire
C:WINNTwinsxsx86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
vers le répertoire C:PerlsitelibautoDBDIngres

Maintenant, quand je lance mon appli, il trouve bien la
bibliothèque, mais ça ne marche toujours pas :
Runtime Error !
R6034
An application has attempt to load the C runtime library incorrectly.

Il faut faire quoi maintenant pour faire marcher ce module ?


Question pour les perliens : est-ce qu'il y aurait un endroit où
trouver un PPM de DBD::Ingres déployable normalement ?


Question pour les windowsiens : est-ce qu'il y aurait un moyen de
pouvoir compiler un machin déployable normalement sans s'emmerder avec
des runtimes pourris qui ne marchent pas ?

Pour info, ma machine de dev est un win2000, ma machine de test un
Win XP pro 2002, et cette appli sera développé sur des machines dont
je ne contrôle absolument pas les versions de Windows installé dessus.


cdlt,
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 6
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Le Gaulois
Le #14348031
Stephane Dupille a écrit :

Question pour les windowsiens : est-ce qu'il y aurait un moyen de
pouvoir compiler un machin déployable normalement sans s'emmerder avec
des runtimes pourris qui ne marchent pas ?



Si ton programme n'a rien de spécifique à Visual C++ tu peux
télécharger Open Watcom (gratuit) il est facile à mettre en oeuvre
et tu auras peut-être moins de problèmes de runtime.

Il existe un forum fr.comp.os.ms-windows.programmation
c'est peut-être plus approprié.

voir aussi fr.comp.lang.perl
Paul Gaborit
Le #148290
À (at) Tue, 31 Jul 2007 10:38:38 +0200,
Stephane Dupille
J'ai finit par copier le fichier MSVCR80.dll depuis le répertoire
C:WINNTwinsxsx86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
vers le répertoire C:PerlsitelibautoDBDIngres


C'est, je crois une "bonne" solution puisque c'est ce module qui en dépend.

Maintenant, quand je lance mon appli, il trouve bien la
bibliothèque, mais ça ne marche toujours pas :
Runtime Error !
R6034
An application has attempt to load the C runtime library incorrectly.

Il faut faire quoi maintenant pour faire marcher ce module ?



Peut-être suivre les conseils de microsoft :

--
Paul Gaborit - Perl en français -
Paul Gaborit
Le #14348021
À (at) Tue, 31 Jul 2007 10:38:38 +0200,
Stephane Dupille
J'ai finit par copier le fichier MSVCR80.dll depuis le répertoire
C:WINNTwinsxsx86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
vers le répertoire C:PerlsitelibautoDBDIngres



C'est, je crois une "bonne" solution puisque c'est ce module qui en dépend.

Maintenant, quand je lance mon appli, il trouve bien la
bibliothèque, mais ça ne marche toujours pas :
Runtime Error !
R6034
An application has attempt to load the C runtime library incorrectly.

Il faut faire quoi maintenant pour faire marcher ce module ?




Peut-être suivre les conseils de microsoft :

--
Paul Gaborit - Perl en français -
Stephane Dupille
Le #148191
Peut-être suivre les conseils de microsoft :


J'étais justement en train de lire ces pages, mais je n'y comprends
pas grand chose. Que dois-je modifier dans mon Makefile pour inclure
ce manifest en question ? Pourquoi n'est-il pas créé par défaut ?

Stephane Dupille
Le #14348011
Paul Gaborit
Peut-être suivre les conseils de microsoft :



J'étais justement en train de lire ces pages, mais je n'y comprends
pas grand chose. Que dois-je modifier dans mon Makefile pour inclure
ce manifest en question ? Pourquoi n'est-il pas créé par défaut ?
Paul Gaborit
Le #148190
À (at) Tue, 31 Jul 2007 11:43:40 +0200,
Stephane Dupille
Peut-être suivre les conseils de microsoft :


J'étais justement en train de lire ces pages, mais je n'y comprends
pas grand chose. Que dois-je modifier dans mon Makefile pour inclure
ce manifest en question ? Pourquoi n'est-il pas créé par défaut ?


Là, il faudra attendre la réponse des windowsiens (ça existe ce
terme ?). ;-)

--
Paul Gaborit - Perl en français -

Paul Gaborit
Le #14348001
À (at) Tue, 31 Jul 2007 11:43:40 +0200,
Stephane Dupille
Paul Gaborit
Peut-être suivre les conseils de microsoft :



J'étais justement en train de lire ces pages, mais je n'y comprends
pas grand chose. Que dois-je modifier dans mon Makefile pour inclure
ce manifest en question ? Pourquoi n'est-il pas créé par défaut ?



Là, il faudra attendre la réponse des windowsiens (ça existe ce
terme ?). ;-)

--
Paul Gaborit - Perl en français -
Stephane Dupille
Le #14347991
Le Gaulois
Si ton programme n'a rien de spécifique à Visual C++ tu peux
télécharger Open Watcom (gratuit) il est facile à mettre en oeuvre
et tu auras peut-être moins de problèmes de runtime.



J'ai essayé rapidement. En un mot, c'est pire : le générateur de
Makefile n'est clairement pas prévu pour fonctionner avec OpenWatcom.
Du coup, il essaye de trouver des bibliothèques qui ne sont pas
livrées avec Watcom, et nmake n'arrive même pas à lire correctement le
Makefile généré :

C:PerlcpanbuildDBD-Ingres-0.51>nmake /h
Open Watcom C/C++ NMAKE Clone for 386 Version 1.6
Portions Copyright (c) 1995-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
makefile(335): Error(E21): Extension(s) (.PHONY) not defined
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
makefile(335): Error(E09): Ignoring out of place Path Specifier
Error(E02): Make execution terminated

Bref, c'est pire.

Il existe un forum fr.comp.os.ms-windows.programmation
c'est peut-être plus approprié.



Merci.

voir aussi fr.comp.lang.perl



Oui, c'était crossposté initialement avec le forum Perl.
Jeuf
Le #14347981
Le 31/07/2007, Le Gaulois a écrit dans
Stephane Dupille a écrit :

Question pour les windowsiens : est-ce qu'il y aurait un moyen de
pouvoir compiler un machin déployable normalement sans s'emmerder avec
des runtimes pourris qui ne marchent pas ?





Salut Stéphane,
Je n'ai pas toutes les données de ton problème, mais il semble que
.NET serait une bonne alternative...
En utilisant "Perl for .NET", ça ne pourrait pas le faire ?
http://www.dotnet-fr.org/sections.php3?op=viewarticle&artid=3

--
Un nouveau site tout beau tout neuf, sur lequel on est encouragé à
intervenir : http://aieaie.com
Stephane Dupille
Le #148189
Peut-être suivre les conseils de microsoft :


J'ai potassé, j'ai appliqué, mais ça ne marche toujours pas.

Pour rappel, j'essaye de compiler une DLL Ingres.dll. Lors de la
compilation, j'ai bien un fichier Ingres.dll.manifest qui est créé,
dont voici le contenu :
<assembly xmlns='urn:schemas-microsoft-com:asm.v1'
manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT'
version='8.0.50608.0' processorArchitecture='x86'
publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>


Sur la machine cible, j'ai un répertoire
c:WindowsWinSxSx86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.050727.42_x-ww_0de06acd/
qui contient bien un msvcr80.dll (et deux autres DLL)
et il me dit toujours qu'il n'arrive pas à trouver msvcr80.dll


Bref, rien de changé par rapport à avant. Mais pourquoi est-ce que
ce crétin ne trouve pas la DLL ? Pourquoi est-ce que quand je la lui
fournit il n'arrive pas à l'utiliser. Pire : mais pourquoi ce con a
besoin de cette DLL pourrie ?

Publicité
Poster une réponse
Anonyme