IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Problème de DLL avec libjpeg


Sujet :

Visual C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut Problème de DLL avec libjpeg
    Bonjour,

    J'ai développé un logiciel utilisant libjpeg, compilé avec ancienne version de Visual C++. Tout fonctionnait bien et je pouvais utiliser l'exécutable généré sur n'importe quel PC.

    Puis j'ai changé de PC et j'ai installé Visual C++ 2019. Et depuis j'ai des soucis avec les DLL de libjpeg :
    1. Sur un premier PC, l'exécution du programme affichait "Impossible d'exécuter le code, car jpeg62.dll est introuvable". Du oup j'ai mis jpeg62.dll dans le répertoire du programme, et tout fonctionne bien.
    2. Sur une second PC, j'ai installer le logiciel en mettant directement jpeg62.dll dans le répertoire. Et là, l'exécution du programme m'affiche "Wrong JPEG library version : library is 62, caller expects 50".

    Je ne comprends pas tout. Comment faire pour que la DLL sont linké avec le code, et éviter ainsi le m'essage d'erreur

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 175
    Points : 12 302
    Points
    12 302
    Par défaut
    Quand un programme a besoin d'une Dll, généralement, on s'arrange pour que le programme d'installation ou le MSI ajoute la Dll compatible avec l'exécutable a un endroit accessible par le chargeur de l'OS, lors du lancement du programme.
    Que le répertoire du fichier image du programme fasse partie du DLLPATH, c'est pas une obligation et, généralement, les outils de création d'installation (exe ou MSI) se chargent eux-mêmes de ce type de détails.
    Chaque version de VC++ vient avec ses "redistribuables" qu'il faut généralement ajouter à l'installation (sous forme de MSM à ajouter au MSI, par exemple).

    > je pouvais utiliser l'exécutable généré sur n'importe quel PC.
    Coup de bol, ou vous ne vous souvenez plus que vous aviez créé un package d'installation.

    1.) Prenez la peine de créer un projet de déploiement qui s'occupera de copier au bon endroit cette Dll, lors de l'installation de votre solution applicative.
    2.) Les concepteurs de la libjpeg ont eu l'intelligence d'implémenter un vérificateur de version lors du chargement de la Dll. Vous devriez les remerciez.
    Quand vous linkez votre exécutable avec une librairie de dll, un fichier "libjpeg.lib" ou approchant, ce fichier est celui de la version 5.0 de la libjpeg, et non une version 6.2.
    Soit vous utilisez une Dll correspondant au fichier .lib utilisé pendant l'édition de lien de votre programme.
    Soit vous utilisez un fichier .lib, lors de l'édition de lien, correspondant à la version de la Dll que vous voulez utiliser au runtime.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 45
    Points : 52
    Points
    52
    Par défaut
    Merci Bacelar pour toutes ces précisions.

    J'ai finalement résolu le problème en repartant des sources libjpeg et en me construisant une bibliothèque statique plutôt qu'une dll.

    Il y avait quand même quelque chose d'étrange, car le logiciel demandait la version 6.2 de libjpeg et, quand on avait installé cette version 6.2, il disait qu'il fallait la version 8.0. Et quand on installait la 8.0 il plantait.
    Mais ça marchait quand même sur certains PC.
    Bizarre.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 175
    Points : 12 302
    Points
    12 302
    Par défaut
    il disait qu'il fallait la version 8.0
    C'est qui il ?
    Et quand on installait la 8.0 il plantait.
    Mais ça marchait quand même sur certains PC.
    Les "mystères" du Dll Hell.
    En regardant attentivement la configuration et les fichiers présents dans le système, le "mystère" s’évanouit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de DLL avec serveur IIS
    Par Digital'z dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 19/09/2016, 17h10
  2. Problème de DLL avec Qt
    Par iSteelZ dans le forum Débuter
    Réponses: 5
    Dernier message: 08/10/2011, 14h41
  3. Problème chargement dll avec VC++ 2K8
    Par Tazadar dans le forum C++
    Réponses: 0
    Dernier message: 16/04/2009, 16h05
  4. Problème de lien avec wsock32.dll sous g++ (mingw32)
    Par TheShadow dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 11/04/2006, 14h43
  5. Problème création de DLL avec CString
    Par loupdeau dans le forum MFC
    Réponses: 3
    Dernier message: 21/07/2005, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo