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"
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
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é".
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
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é".
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
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.
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
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.
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é".
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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é".
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é".