/dev/log

Blog technique de Benjamin Billet

libjpeg

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.