Bonjour à tous !
Je viens demander de l'aide pour un problème de compilation. J'ai un code qui fonctionne sur ma machine, amd64. En essayant de le compiler sur une autre architecture (arm), j'ai le message d'erreur suivant :
/usr/include/poker-eval/poker_defs.h:52:19: error: redefinition of typedef ‘uint64’
/usr/lib/ocaml/caml/config.h:124:26: note: previous declaration of ‘uint64’ was here
/usr/include/poker-eval/poker_defs.h:79:24: error: redefinition of typedef ‘uint32’
/usr/lib/ocaml/caml/config.h:108:22: note: previous declaration of ‘uint32’ was here
Effectivement, chacune des deux librairies cherche à redéfinir les types si ceux-ci ne sont pas présent nativement sur l'architecture. Peut-être existe-t-il une solution simple pour contourner ce problème, mais je ne vois pas trop comment faire…
Cela vous est-il déjà arrivé ?
Merci à vous.
# Un problème de macro ?
Posté par Zylabon . Évalué à 3.
Comment sont faites les définitions de uint32 et uint64 dans les fichiers en questions ?
Please do not feed the trolls
[^] # Re: Un problème de macro ?
Posté par chimrod (site web personnel) . Évalué à 2. Dernière modification le 30 décembre 2012 à 17:53.
Elles diffèrent, bien évidement !
Dans poker_defs.h (le source est ici):
et pour ocaml (j'ai pas trouvé de source en ligne ):
Est-ce que ce genre d'incompatibilité arrive souvent ? Est-ce un bug ?
[^] # Re: Un problème de macro ?
Posté par benja . Évalué à 4.
Non ce n'est pas un bug, les typedefs désignent bien deux choses différentes lorsque l'architecture n'est pas 64bits : un unsigned long long pour poker et une structure de deux membres pour OCaml. Il n'y a aucun espoir de pouvoir faire passer l'un pour l'autre et, justement, le compilateur l'interdit.
Ce qui pourrait peut-être marcher c'est renommer une variante avec une macro du préprocesseur avant d'inclure un des entêtes (sans oublier de le désactiver juste après pour ne pas impacter les autres inclusions!) et ensuite utiliser le nouveau nom dans ton code. Par exemple en renommant l'alias d'OCaml :
Sans résultat garanti ;-)
[^] # Re: Un problème de macro ?
Posté par chimrod (site web personnel) . Évalué à 3.
Yeeeahh !
Je viens de tester et la compilation passe ! Merci beaucoup, j'aurai jamais pensé à ça…
[^] # Re: Un problème de macro ?
Posté par benja . Évalué à 2.
De rien ;-)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.