[Resolu] Problème portabilité entre PC sous WinXP

Problème portabilité entre PC sous WinXP [Resolu] - C++ - Programmation

Marsh Posté le 27-06-2008 à 07:34:05    

Bonjour,
 
   Je suis en train de développer une petite application qui me permet de visionner des images. Au niveau des libs j'utilise uniquement QT 4.3 (pour la GUI, lire les images, ...) et boost::filesystem (pour la gestion du système de fichier) et bien sûr la STL, le tout étant compilé par CL (de Visual studio 2008) sous Windows XP (Familial).
   Mon problème est au moment où je veux lancer une release sur un autre PC. En effet, sur le PC de dev quand je lance mon appli au sein de VS tout marche très bien, par contre j'ai constaté qu'il avait l'air de toujours avoir besoin du fichier "Vision.exe.manifest" (mon appli s'apelle vision ;) ) à proximité de l'exe sinon j'ai le droit à un "runtime error :   R6034" comme quoi mon application essayerai de charger la "C runtime library" de façon incorrecte. Mais par contre si j'ai le .manifest à côté tout se passe bien...
   La où se trouve exactement mon souci, c'est que si j'essaye mon application sur un autre PC (sous Win XP pro) et que je met le .manifest à côté, il me balance une erreur comme quoi "la configuration de mon application est incorrecte". Et si je ne met pas le manifest, j'ai a nouveau le droit à l'erreur "C runtime library".
   Donc je suis un peu perplexe...
 
Mon fichier manifest contient les infos suivantes :

Code :
  1. <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
  2. <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  3.   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  4.     <security>
  5.       <requestedPrivileges>
  6.         <requestedExecutionLevel level='asInvoker' uiAccess='false' />
  7.       </requestedPrivileges>
  8.     </security>
  9.   </trustInfo>
  10.   <dependency>
  11.     <dependentAssembly>
  12.       <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
  13.     </dependentAssembly>
  14.   </dependency>
  15.   <dependency>
  16.     <dependentAssembly>
  17.       <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
  18.     </dependentAssembly>
  19.   </dependency>
  20. </assembly>

Donc je sais pas si vous voyez un truc...  
 
Au niveau de la compilation, c'est une release que je demande à VS. Le projet est un projet Makefile, compilé à l'aide de la commande :

Code :
  1. qmake -project & qmake & nmake release -nologo


 
Après je sais pas si ça a un lien, mais j'avais buildé les libs de QT4.3 avec le compilo de Visual 2005 et là j'utilise le 2008... Mais je trouverai ça étrange car ça marche pourtant bien sur mon de Dev. C'est juste sur l'autre que ça ne marche pas... (boost à lui été compilé sous VS2008)
 
Voila, est ce que vous auriez une idée ? :D  
 
ps :
Je tien à signaler que je n'utilise pas de fonction C au sein de mon appli (donc c'est pas une histoire de extern "C" {} ). Je ne fait qu'utiliser que la STL (pour les std::list, std::vector, std::string), boost::filesystem et l'API de QT. Donc que du C++...


Message édité par Amonchakai le 28-06-2008 à 21:33:24
Reply

Marsh Posté le 27-06-2008 à 07:34:05   

Reply

Marsh Posté le 27-06-2008 à 07:50:52    

Bon, encore un autre truc : Je viens de penser à tester une autre application que j'ai faite avec QT (un simple hello world : c'est convertisseur numérique des tutoriels de QT) et là par contre je n'ai pas de soucis...
Par contre, sur cette deuxième appli il me demande les DLL MSVCR80 et MSVCP80 alors que sur ma première appli (qui ne marche pas) il demande MSVCR90 et MSVCP90
 
J'ai donc dut rajouter à côté de l'exe les DLL MSVCR90 et MSVCP90 car je ne les avaient pas sur mon pc en question. par contre MSVCR80 et MSVCP80 je les avaient déjà...
Est ce que j'ai fait une bêtise en rajoutant bêtement ces 2 DLL à la livraison de mon application ? Il fallait procéder autrement ?


Message édité par Amonchakai le 27-06-2008 à 07:55:47
Reply

Marsh Posté le 28-06-2008 à 17:10:45    

Bon, j'ai toujours pas réussit a faire fonctionner mon appli sur un autre PC. J'ai essayé de l'exécuter sur un PC au taff et j'ai eu le droit à la même puniton.  
Alors en regardant le fichier manifest, on vois qu'il a l'air de parler de deux version de "Microsoft.VC90.CRT" une en 90 et une en 80. Je me suis donc dit qu'il y avait peut-être un problème a cause du fait que j'utilisait QT4.3.0 compilé sous le VC2005 avec VC2008. J'ai donc profité de l'occasion pour télécharger QT4.4.0, tout recompilé avec VC2008. J'ai également téléchargé les libs de boost pour la visual 2008 (comme ça j'utilise plus la version que j'avais compilé). J'ai également mis à jour ma version du Platform SDK.
Grosse mise à jour quoi :p
 
Bilan, c'est un poil différent : sur mon PC de dev, j'ai plus besoin d'avoir le .manifest à côté de mon .exe pour que ça marche :)
Par contre sur l'autre PC, j'ai toujours la vielle erreur "la configuration de mon application est incorrecte".
Mais au final, je n'ai plus du tout d'erreur au niveau de la "C runtime library". Comme quoi il devait bien y avoir un soucis de version entre VC2005 et VC2008.
 
Mais bon, je suis toujours bloqué derrière cette erreur. Est ce que vous auriez une idée ?
Merci :)

Reply

Marsh Posté le 28-06-2008 à 17:39:38    

Bon, nouvelle progression. Je viens de voir qu'il fallait lancer l'appli "vcredist_x86.exe" sur les PC clients pour pouvoir leurs rajouter les DLL qui manquent. (sur la MSDN : http://www.microsoft.com/downloads [...] layLang=fr )
Après avoir lancé cet exécutable j'arrive enfin à lancer mon appli sur PC cible :) Bon, il est clair qu'il va falloir faire une version packagé pour automatiser cette manip avec l'installation de mon appli, mais c'est déjà un premier pas.
 
Mais bon après je dois toujours avoir des problèmes de DLL car dès que j'essaye d'ouvrir une QPixMap sur le PC client j'ai le droit à un beau plantage alors que la même manip sur le PC de Dev marche très bien :/

Reply

Marsh Posté le 28-06-2008 à 18:46:21    

Tu ne peux pas faire un projet d'install avec Visual 2008 ? C'est automatiquement proposé lorsque c'est nécessaire.

Reply

Marsh Posté le 28-06-2008 à 19:00:26    

Ok, merci je vais aller voir de ce côté :)
 
Car là je viens de voir un truc bizarre : en fait la QPixmap arrive à ouvrir n'importe quel type d'image supporté sauf le jpg :/ (et cela bien sur que sur l'autre PC) donc il doit encore y avoir une dll que j'ai oublié...  
Je vais donc opter pour le projet d'install :D

Reply

Marsh Posté le 28-06-2008 à 21:32:57    

Bon finalement ça marche :D
 
J'avais pas vu qu'il fallait fournir la DLL qjpeg4.dll pour avoir le support du jpeg. (pour ceux que ça intéressera, faut en plus faire gaffe de la mettre au bon endroit : <repertoire application>/imageformats/ ) et puis ça roule.
 
Par contre j'arrive pas à automatiser la détection des dépendances au sein d'un projet d'installation de VS. Je suis allé voir la MSDN ( http://msdn.microsoft.com/fr-fr/library/ms235317.aspx ) je suis pas à pas les explications mais il veut pas trouver de dépendances... Par contre ce qui est sympa c'est que ça permet d'avoir un outil super simple pour faire une version packagé. Je pense que je vais investir du temps sur l'apprentissage de cet outil. A mon avis, ce sera pas une perte de temps :)

Reply

Marsh Posté le 29-06-2008 à 01:44:25    

Si tu inclus dans ton projet d'installation les projets des exe, Visual détectera automatiquement les dépendances.

Reply

Marsh Posté le 29-06-2008 à 10:51:01    

Ok, effectivement quand on rajoute le projet de l'exe à la solution du projet d'installation. Que l'on ne rajoute plus à la main les exe mais que l'on lui demande de mettre les sorties du projet générant les .exe, j'ai bien la détection des dll dépendante.  
Par contre il ne détecte des dépendances que pour QtCore4.dll et QtGui4.dll. Et donc du coup, il n'a pas l'air de détecter de dépendances avec d'autres DLL (comme MSVCR90.dll et MSVCP90.dll)
Je note également qu'il trouve pas les dépendances pour qjpeg4.dll. Mais ça je peux pas lui en vouloir, car a moins d'ouvrir une jpg il peut pas savoir qu'il peut en avoir besoin...
 
Je vais essayer de trouver un autre PC pour voir si ça marche vraiment bien :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed