2010-01-20 3 views
3

Sur OpenSolaris ($^O eq 'solaris', vers 2.11), j'essaye de construire un module XS qui utilise les spécifications XPGv4v2/Single Unix. compréhension de struct msghdr, spécifiquement pour l'interrogation "données auxiliaires".conflit de définition de structure entre le module XS et la construction perl

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" */ 
.... 

Fournir le "droit" #define s (_XOPEN_SOURCE et _XOPEN_SOURCE_EXTENDED) casse la construction, car elle change beaucoup de choses que perl attendait.

Y a-t-il une manière élégante que le module XS puisse utiliser la définition de structure que je voudrais?

+0

Y a-t-il des chances que vous puissiez construire un nouveau perl en premier et ensuite construire votre modèle XS? – Ether

+0

@Ether, oui, mais j'aimerais que le module soit disponible pour les systèmes OpenSolaris qui ne peuvent pas exécuter un perl reconstruit, – pilcrow

Répondre

2

Vous devez soit utiliser les définitions que votre perl existant comprend, soit 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 soient pas en conflit.

Si vous le souhaitez dans les deux sens, vous devez déterminer les définitions de votre Perl et écrire du code qui gère le bon ensemble de définitions. Vous pouvez ajouter une couche d'abstraction afin de pouvoir implémenter les bits sous-jacents avec l'un ou l'autre ensemble de définitions. C'est beaucoup de code répété probablement, mais c'est ce que la portabilité est, malheureusement. :(

+0

+1 Vous m'avez poussé dans une autre direction, cependant, et je pense qu'il y aura une question de suivi distincte. – pilcrow

Questions connexes