Incompatibilité des normes
Bonjour, je me permet de poser une question sur une chose qui me chagrine.
Je suis tombé sur un article qui proposait la création de plugin en utilisant les fonctions de libdl.
Bon, je vais pas vous faire un long speach sur l'utilisation de ces fonctions mais pour l'utilisation de dlsym, il y a un problème ...
dlsym me renvoie un pointeur void * et il faut effectuer un cast par un pointeur de fonction pour récupérer la fonction de la bibliothèque que l'on vient de charger pour pouvoir utiliser cette fonction.
Cependant, un cast d'un pointeur void* en un pointeur de fonction n'est semble t'il pas autorisé par la norme (en tout cas c'est ce que me dis gcc).
Alors il y a une chose qui m'embête : dlsym semble être POSIX donc normalisé mais ne semble donc pas être compatible avec les normes du C. Il n'y aurait pas contradiction ?
:cfou:
Je prend l'exemple de dlsym mais il doit y en avoir d'autres.
Si quelqu'un a une explication ou même une solution pour contourner le problème ça m'interresse ...
Re: Incompatibilité des normes
Citation:
Envoyé par PRomu@ld
dlsym me renvoie un pointeur void * et il faut effectuer un cast par un pointeur de fonction pour récupérer la fonction de la bibliothèque que l'on vient de charger pour pouvoir utiliser cette fonction.
Vu de la norme, le comportement est indéterminé. Dans la pratique, si la doc te dis de faire comme ça, c'est que sur la plateforme concernée, le comportement est défini.
Re: Incompatibilité des normes
Citation:
Envoyé par PRomu@ld
Alors il y a une chose qui m'embête : dlsym semble être POSIX donc normalisé mais ne semble donc pas être compatible avec les normes du C. Il n'y aurait pas contradiction ?
Je ne vois pas de contradiction. La norme C specifie un certain nombre de choses et en laisse d'autres volontairement indeterminees. Posix complete la norme C en specifiant une partie de ces choses indeterminees, mais a ma connaissance ne demande rien que la norme C ne permet pas. Donc Posix est compatible avec le C.