3

在 OpenSolaris($^O eq 'solaris',版本 2.11)上,我正在尝试构建一个使用 XPGv4v2/Single Unix Spec 的 XS 模块。了解struct msghdr,专门针对“辅助资料”的审讯。

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

提供“正确的” #defines (_XOPEN_SOURCE_XOPEN_SOURCE_EXTENDED) 会破坏构建,因为它改变了 perl 所期望的许多事情。

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

4

1 回答 1

2

你要么必须使用你现有的 perl 理解的定义,要么用你想要的定义编译一个新的 perl。

不过,您不需要替换现有的 perl。您可以单独安装新的 perl,以免它们发生冲突。

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

于 2010-01-20T16:14:39.763 回答