Question

OpenSolaris (2,11 $ ^ O eq 'de solaris', vers.), Je suis en train de construire un module XS qui utilise le XPGv4v2 / Unix unique Spec. compréhension des struct msghdr , en particulier pour l'interrogation "des données auxiliaires".

Cependant, le Perl natif (v5.8.4) a été construit sans les nécessaires définit, et donc le struct msghdr visible dans mon fichier XS est le plus ancien, type BSD ::

#include "EXTERN.h"
#include "perl.h"      /* older, "msg_accrights"-style msghdr now visible */
#include "XSUB.h"

....
  struct msghdr m;
  m.msg_control = buf;  /* ERROR, structure has no member named "msg_control" */
....

L'approvisionnement des #defines « droite » (et de _XOPEN_SOURCE _XOPEN_SOURCE_EXTENDED) brise la construction, car il change beaucoup de choses que Perl attendait.

Y at-il une façon élégante je peux avoir le module XS utiliser la définition de la structure que je voudrais?

Était-ce utile?

La solution

Vous devez soit utiliser les définitions que votre COMPREND perl existant ou compiler un nouveau perl avec les définitions que vous voulez.

Vous n'avez pas besoin de remplacer le Perl existant, cependant. Vous pouvez installer le nouveau perl séparément afin qu'ils ne sont pas en conflit.

Si vous voulez les deux sens, vous devez savoir quelles définitions votre Perl et écrire du code qui gère l'ensemble des définitions droit. Vous pouvez ajouter une couche d'abstraction afin que vous puissiez mettre en œuvre les bits sous-jacents soit avec un ensemble de définitions. Il y a beaucoup de probablement le code répété, mais c'est ce que la portabilité est, malheureusement. : (

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top