Résoudre le conflit entre wxMSW (wxWidget) et libjpeg
Rédigé par Benjamin Billet -
Classé dans : Projet similarity-finder -
Mots clés : wxwidget, libjpeg
CImg et wxWidget entrent en conflit car CImg importe les entêtes de libjpeg et wxMSW importe les entêtes de l'API WIN32 qui, toutes deux, définissent le type boolean :
/usr/include/jmorecfg.h:234:13: error: conflicting declaration 'typedef int boolean' typedef int boolean; ^ ... /usr/include/w32api/rpcndr.h:65:25: note: previous declaration as 'typedef unsigned char boolean' typedef unsigned char boolean; ^
libjpeg prévoit cette éventualité et permet d'éviter la déclaration de typedef int boolean en définissant la constante HAVE_BOOLEAN. Toutefois, si cette constante est définie, libjpeg ne fonctionne plus correctement, provoquant une erreur dans CImg :
[CImg] *** CImgIOException *** [instance(0,0,0,0,0x0,non-shared)] CImg::load(): Failed to recognize format of file 'images\IMG_6225.jpg'.
Je n'ai, pour le moment, pas trouvé de solution satisfaisante à ce problème, hormis modifier le fichier rpcndr.h de façon à changer la déclaration du type boolean :
typedef unsigned char boolean;
// devient
typedef int boolean;
Ce changement entraîne un problème dans wtypesbase.h, qui doit lui aussi être modifié pour commenter la déclaration de BOOLEAN :
// la ligne doit être commentée
typedef boolean BOOLEAN;
Si vous connaissez quelque chose de mieux, merci de m'envoyer un mail et je l'ajouterais ici.