Partage
  • Partager sur Facebook
  • Partager sur Twitter

Failed loading libpng16-16.dll

Le module spécifié est introuvable

Sujet résolu
    3 juin 2022 à 22:47:04

    Bonjour à tous,

    Je vais essayer d'aller vite...

    J'ai un projet utilisant les bibliothèque SDL2 et SDL2_Image. (écrit en C++, mais comme la bibliothèque est écrite en C, et que le problème ne dépend pas du langage de mon code, j'ai préféré poster dans cette section)

    Je sais qu'il marche (que le code fonctionne), parce que je l'ai testé sur un système Linux.

    Maintenant, je souhaite le faire également marcher sur un système Windows.

    J'ai réussi à le compiler sans problèmes notables, ce qui m'a fourni un exécutable .exe.

    Cet exécutable est à côté des fichiers dll suivants :

    • SDL2.dll
    • SDL2_image.dll
    • libpng16-16.dll
    • libzlib1.dll
    • libjpeg-9.dll
    • libtiff-5.dll
    • libwebp-4.dll

    Lors de l'exécution, Windows n'indique pas de dll manquants au programme.

    En revanche, mon code renvoie le message suivant lorsqu'il essaye de charger une image :

    Failed loading libpng16-16.dll: Le module spécifié est introuvable.

    erreur bien sûr récupérée via la fonction ```IMG_GetError()```.

    Et aucune image ne pouvant donc être chargée, la fenêtre est évidemment noire.

    Ma question est la suivante : pourquoi cette erreur apparait-elle, alors que le fichier dll ```libpng16-16.dll``` est bien présent, avec cette orthographe, dans le même dossier que le fichier exécutable ?

    En recherchant sur internet, je suis tombé sur ce post, qui présente un problème similaire, mais n'est malheureusement pas suffisant...

    Le code fonctionne avec Linux Mint 20.03. J'essaye de le faire marcher pour Windows 10.

    J'utilise une compilation en ligne de commande avec gcc (en l'occurence mingw donc) au format suivant :

    g++ -std=c++17 -Wall -Wextra -c [nom du fichier].cpp -o [nom du fichier].o -I"../../../include"

    pour chaque fichier .cpp, puis

    g++ -std=c++17 -Wall -Wextra [liste des fichier .o] -o [fichier exécutable].exe -L"../../../libs" -lmingw32 -lSDL2main -lSDL2 -lSDL2_image

    Si vous avec besoin d'une quelconque autre information que j'aurais oublié de fournir, n'hésitez pas à demander !

    Je vous remercie d'avance, parce que la réponse est sûrement tellement évidente que je vais me maudire ne ne pas y avoir pensé...

    PS.: Il va de soit que pour l'instant, je contourne temporairement le problème en convertissant toutes mes images en .bmp, mais la solution n'est pas tout à fait satisfaisante...

    -
    Edité par Durza42 3 juin 2022 à 22:49:03

    • Partager sur Facebook
    • Partager sur Twitter

    La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

    Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

      3 juin 2022 à 23:58:46

      Hello,

      Une version 32 bits de la dll plutot qu'une version 64 bits (ou l'inverse) ?

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        4 juin 2022 à 11:19:15

        Bonjour,

        J'ai bien vérifié, toutes mes dll sont en 32 bits :

        $ file *
        libjpeg.dll:     PE32 executable (DLL) (console) Intel 80386, for MS Windows
        libpng16-16.dll: PE32 executable (DLL) (console) Intel 80386, for MS Windows
        libtiff.dll:     PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
        libwebp-4.dll:   PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
        SDL2.dll:        PE32 executable (DLL) (console) Intel 80386 (stripped to external PDB), for MS Windows
        SDL2_image.dll:  PE32 executable (DLL) (GUI) Intel 80386 (stripped to external PDB), for MS Windows
        zlib1.dll:       PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
        zlib.dll:        PE32 executable (DLL) (GUI) Intel 80386, for MS Windows
        

        (en faisant exprès de prendre un fichier dll 64 bits, choisi totalement au hasard, le résultat est le suivant)

        $ file aadauthhelper.dll
        aadauthhelper.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows
        

        -
        Edité par Durza42 4 juin 2022 à 11:21:34

        • Partager sur Facebook
        • Partager sur Twitter

        La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

        Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

          9 juin 2022 à 8:47:26

          C'est zlib1.dll ou libzlib1.dll que tu as dans le même répertoire que ton executable? zlib1.dll est le nom de fichier le plus fréquent sous Windows, et il se peut que ton libpng16-16.dll attende ce nom, et non pas libzlib1.dll
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2022 à 10:09:50

            Salut Durza 42,

            Il y a des utilisateurs qui se plaignent du même type de problème sur le forum SDL:

            https://discourse.libsdl.org/t/sdl2-image-fails-loading-libpng-on-latest-versions-when-cross-compiling/24494/3

            Celui-là indique qu'il a ce type d'erreurs avec des versions de SDL2_image postérieures à la 2.0.1

            Pour voir si tu es dans le même cas. Récupère une version de SLD2_image 2.0.1 (en 32 bits puisque tu travailles ainsi) et vois si cela résout ton problème.

            SDL2_image-2.0.1-win32-x86.zip

            Je suppose que tu utilises les .dll contenus dans SDL2_image et que tu ne les mélanges pas avec des .dll d'une autre provenance.

            -
            Edité par Dlks 9 juin 2022 à 10:11:15

            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2022 à 9:16:35

              Merci tout le monde!

              Le problème a bien été résolu grâce à solution de Dlks : la version de SDL2_image était la source de l'erreur.

              Bonne journée et merci encore,

              Durza42

              -
              Edité par Durza42 13 juin 2022 à 9:17:03

              • Partager sur Facebook
              • Partager sur Twitter

              La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

              Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

              Failed loading libpng16-16.dll

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown