XS模块和perl构建之间的结构定义冲突

时间:2010-01-20 15:29:16

标签: c perl solaris perl-xs

在OpenSolaris($ ^ O eq' solaris',2.11版)中,我正在尝试构建一个使用XPGv4v2 / Single Unix Spec的XS模块。理解struct msghdr,特别是“辅助数据”审讯。

但是,本机perl(v5.8.4)是在没有必要定义的情况下构建的,因此我的XS文件中可见的struct msghdr是较旧的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" */
....

提供“正确的”#define s(_XOPEN_SOURCE_XOPEN_SOURCE_EXTENDED)会破坏构建,因为它会改变perl所期待的许多内容。

我是否有一种优雅的方式让XS模块使用我想要的结构定义?

1 个答案:

答案 0 :(得分:2)

您必须使用现有perl可以理解的定义,或者使用您想要的定义编译新的perl。

但是,您不需要替换现有的perl。您可以单独安装新的perl,这样它们就不会发生冲突。

如果你想要两种方式,你必须弄清楚你的Perl有哪些定义,并编写处理正确定义的代码。您可以添加一个抽象层,以便可以使用任一组定义实现基础位。这可能是很多重复的代码,但不幸的是,这就是可移植性。 :(